首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PyQt: QTableView + QSqlTableModel -将所有选定的行或列复制并粘贴到记事本或QSqlTableModel中

PyQt是一个Python的GUI编程工具包,它提供了丰富的组件和功能,可以用于创建各种类型的图形用户界面应用程序。QTableView是PyQt中的一个表格视图组件,可以用于显示和编辑表格数据。QSqlTableModel是PyQt中的一个模型类,用于与数据库表进行交互。

在使用QTableView和QSqlTableModel时,如果想将选定的行或列复制并粘贴到记事本或QSqlTableModel中,可以按照以下步骤进行操作:

  1. 获取选定的行或列:可以使用QTableView的selectionModel()方法获取选择模型,然后使用selectedRows()或selectedColumns()方法获取选定的行或列。
  2. 复制选定的行或列:可以使用QClipboard类将选定的行或列复制到剪贴板。可以使用QModelIndexList中的数据来获取选定的行或列的数据,并使用QClipboard的setText()方法将数据设置到剪贴板中。
  3. 粘贴到记事本或QSqlTableModel中:如果要粘贴到记事本中,可以使用Python的文件操作函数将剪贴板中的数据写入到记事本文件中。如果要粘贴到QSqlTableModel中,可以使用QSqlTableModel的insertRows()和setData()方法将数据插入到模型中。

以下是一个示例代码,演示了如何将选定的行或列复制并粘贴到记事本或QSqlTableModel中:

代码语言:python
复制
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView, QAbstractItemView, QMenu, QAction, QFileDialog
from PyQt5.QtGui import QClipboard
from PyQt5.QtCore import Qt, QModelIndex
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.table_view = QTableView(self)
        self.setCentralWidget(self.table_view)

        # 创建数据库连接
        self.db = QSqlDatabase.addDatabase("QSQLITE")
        self.db.setDatabaseName("database.db")
        self.db.open()

        # 创建模型
        self.model = QSqlTableModel(self, self.db)
        self.model.setTable("table_name")
        self.model.select()

        # 设置表格视图
        self.table_view.setModel(self.model)
        self.table_view.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.table_view.setContextMenuPolicy(Qt.CustomContextMenu)
        self.table_view.customContextMenuRequested.connect(self.show_context_menu)

    def show_context_menu(self, pos):
        menu = QMenu(self.table_view)
        copy_action = QAction("复制", self)
        copy_action.triggered.connect(self.copy_selected_rows_or_columns)
        menu.addAction(copy_action)
        menu.exec_(self.table_view.viewport().mapToGlobal(pos))

    def copy_selected_rows_or_columns(self):
        selection_model = self.table_view.selectionModel()
        indexes = selection_model.selectedIndexes()

        if len(indexes) == 0:
            return

        # 获取选定的行或列
        rows = set()
        columns = set()
        for index in indexes:
            rows.add(index.row())
            columns.add(index.column())

        # 复制选定的行或列到剪贴板
        clipboard = QApplication.clipboard()
        mime_data = []
        for row in rows:
            row_data = []
            for column in columns:
                index = self.model.index(row, column)
                row_data.append(index.data())
            mime_data.append("\t".join(row_data))
        clipboard.setText("\n".join(mime_data))

        # 粘贴到记事本或QSqlTableModel中
        file_dialog = QFileDialog(self)
        file_dialog.setAcceptMode(QFileDialog.AcceptSave)
        file_dialog.setDefaultSuffix("txt")
        file_dialog.setOption(QFileDialog.DontUseNativeDialog, True)
        file_dialog.setFileMode(QFileDialog.AnyFile)
        if file_dialog.exec_() == QFileDialog.Accepted:
            file_path = file_dialog.selectedFiles()[0]
            with open(file_path, "w") as file:
                file.write("\n".join(mime_data))

            # 或者将数据插入到QSqlTableModel中
            for row_data in mime_data:
                self.model.insertRows(self.model.rowCount(), 1)
                for column, data in enumerate(row_data.split("\t")):
                    index = self.model.index(self.model.rowCount() - 1, column)
                    self.model.setData(index, data)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

在这个示例代码中,我们创建了一个主窗口,并在主窗口中添加了一个QTableView作为中心组件。我们使用QSqlTableModel来管理数据,并将其设置为QTableView的模型。通过设置QTableView的选择模式为ExtendedSelection,可以实现多选功能。我们还为QTableView添加了一个上下文菜单,用于触发复制操作。

在复制操作中,我们首先获取选定的行或列的索引,然后将其对应的数据复制到剪贴板中。接下来,我们通过QFileDialog选择保存文件的路径,并将数据写入到文件中。如果要将数据插入到QSqlTableModel中,可以使用insertRows()和setData()方法将数据插入到模型中。

需要注意的是,这只是一个示例代码,具体的实现方式可能因应用场景的不同而有所差异。在实际开发中,可以根据需求进行适当的修改和扩展。

推荐的腾讯云相关产品:腾讯云数据库MySQL、腾讯云对象存储COS、腾讯云云服务器CVM等。您可以访问腾讯云官网了解更多产品信息和文档:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Qt数据库sqlite总结

其中SQL语句“select * from student”“*”号表明查询表记录所有属性。...获取每条记录属性(即个数 int fieldNo = query.record().indexOf(“name”);//获取”name”属性所在编号,从左向右编号,最左边编号为0 int...model->setEditStrategy(QSqlTableModel::OnManualSubmit);//设置保存策略为手动提交 model->select(); //选取整个表所有 //...//当tableview被修改后,要通过submitAll()函数进行保存  bool QSqlTableModel::submitAll (),提交所有被修改数据,然后修改数据被保存在数据库 model...();    //返回所有选定模型项目索引列表 foreach (QModelIndex index, selected) {     int curRow=index.row();     model

2.8K20

python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例

PyQt5表格控件QTableView简介 在通常情况下,一个应用需要和一批数据进行交互,然后以表格形式输出这些信息,这时就需要用到QTableView类了,在QTableView可以使用自定义数据模型来显示内容...查询结果集进行封装 QSqlTableModel 对SQL表格进行封装 QSqlRelationalTableModel 对带有foreign keySQL表格进行封装 QSortFilterProxyModel...对模型数据进行排序过滤 QTableView使用实例 import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import *...#设置数据层次结构,44 self.model=QStandardItemModel(4,4) #设置水平方向四个头标签文本内容 self.model.setHorizontalHeaderLabels...本文主要介绍了PyQt5表格控件QTableView详细使用方法与实例,更多关于这方面的知识请查看下面的相关链接

5.2K22

【QT】QT模型视图

模型/视图编程 Qt模型/视图架构用来实现大量数据存储、处理及显示。...模型 所有的模型都基于QAbstractItemModel类,该类提供了十分灵活接口来处理各种视图,这些视图数据表现形式为表格(table)、列表(list)、树(tree)。...模型索引QModeIIndex类提供对一块数据临时引用, 用来修改检索模型数据,获取一个数据项模型索引必须指定模型3个属性:行号、号和父项模型索引。...QListView数据项显示为一个列表;QTableView模型数据显示在一个表格;QTreeView模型数据项显示在具有层次列表。...QItemDelegate其一来为视图中项目绘制和提供编辑器。

2.9K10

C++ Qt开发:SqlRelationalTable关联表组件

通过这个类,你可以在一个表中使用外键关联到另一个表数据上。例如主表某个字段与附加表特定字段相关联起来,QSqlRelation(关联表名,关联ID,名称)就是用来实现多表之间快速关联。...来得到特定表记录,通过setHeaderData数据关联到对应数据模型内,最后通过setModel方法即可将对应表数据关联到前端显示,其核心代码如下所示;MainWindow::MainWindow...indexColumn: 关联表与当前表关联名称,通常是外键。displayColumn: 关联表要显示名称,通常是与外键相关实际数据。...db.open()) return;设置主窗口布局和属性主窗口中央部件设置为一个 QTableView,同时对表格选择行为和外观进行了设置。..."学院" 与 "Departments" 表 "departID" 关联起来,并在表格显示 "department" 数据。

17110

CC++ Qt 数据库与SqlTableModel组件应用

SqlTableModel 组件可以数据库特定字段动态显示在TableView表格组件,通常设置QSqlTableModel变量作为数据模型后就可以显示数据表内容,界面组件则通过QDataWidgetMapper...// 添加数据映射,选中字段映射到指定编辑框 // https://www.cnblogs.com/lysharK dataMapper= new QDataWidgetMapper...当用户点击TableView组件内某一记录时,则触发MainWindow::on_currentRowChanged函数。...执行获取name/mobile字段,放入映射数据集中 lineEdit编辑框 void MainWindow::on_currentRowChanged(const QModelIndex ¤t...如果需要修改增加特定记录我们只需要点击相应按钮,并在选中行直接编辑即可实现向数据库插入数据,而有时我们不希望通过在原表上操作,而是通过新建窗体并在窗体完成增删改,此时就需要使用Dialog窗体配合原生

89010

Python Qt GUI设计:QTableView、QListView、QListWidet、QTableWidget、QTreeWidget和QTreeWidgetltem表格和树类(提升篇—1)

QListView类常用方法如下表所示: QListView类常用信号如下表所示: 通过示例了解QListView类使用方法,效果如下所示: 示例QListView控件clicked...QListWidget类常用方法如下表所示: QListWidget类常用信号如下表所示: 通过示例了解QListWidget类使用方法,效果如下所示: 示例QListWidget...通过示例了解QTableWidget类使用方法,效果如下所示: 示例, 构造了一个QTableWidget对象,并且设置表格为43。...QAbstractItemView.NoEditTriggers) # 设置表格为整行选择 #tableWidget.setSelectionBehavior( QAbstractItemView.SelectRows) # 大小设为与内容相匹配...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站立刻删除。

3K20

CC++ Qt 数据库与SqlTableModel组件应用

SqlTableModel 组件可以数据库特定字段动态显示在TableView表格组件,通常设置QSqlTableModel变量作为数据模型后就可以显示数据表内容,界面组件则通过QDataWidgetMapper...// 添加数据映射,选中字段映射到指定编辑框 // https://www.cnblogs.com/lysharK dataMapper= new QDataWidgetMapper....图片当用户点击TableView组件内某一记录时,则触发MainWindow::on_currentRowChanged函数。...执行获取name/mobile字段,放入映射数据集中 lineEdit编辑框void MainWindow::on_currentRowChanged(const QModelIndex ¤t...如果需要修改增加特定记录我们只需要点击相应按钮,并在选中行直接编辑即可实现向数据库插入数据,而有时我们不希望通过在原表上操作,而是通过新建窗体并在窗体完成增删改,此时就需要使用Dialog窗体配合原生

84530

Python Qt GUI设计:QTableView、QListView、QListWidet、QTableWidget、QTreeWidget和QTreeWidgetltem表格和树类(提升篇—1)

QTableView控件可以绑定一个模型数据用来更新控件上内容,可用模式如下表所示: 通过示例了解QTableView使用方法,效果如下所示: 实现代码如下所示: from PyQt5.QtWidgets...QListView类常用方法如下表所示: QListView类常用信号如下表所示: 通过示例了解QListView类使用方法,效果如下所示: 示例QListView控件clicked...QListWidget类常用方法如下表所示: QListWidget类常用信号如下表所示: 通过示例了解QListWidget类使用方法,效果如下所示: 示例QListWidget...通过示例了解QTableWidget类使用方法,效果如下所示: 示例, 构造了一个QTableWidget对象,并且设置表格为43。...QAbstractItemView.NoEditTriggers) # 设置表格为整行选择 #tableWidget.setSelectionBehavior( QAbstractItemView.SelectRows) # 大小设为与内容相匹配

3.8K30

PyQT5 实现快捷键复制表格数据方法示例

本文主要介绍了PyQT5 实现快捷键复制表格数据方法示例,分享给大家,具体如下: 表格数据如下: ?...() # 获取单元格行号,号 if row in indexes_dict.keys(): indexes_dict[row].append(column) else: indexes_dict[row...] = [column] # 数据表数据用制表符(\t)和换行符(\n)连接,使其可以复制到excel文件 text = '' for row, columns in indexes_dict.items...: text = selected_tb_text(self.tableView) # 获取当前表格选中数据 if text: pyperclip.copy(text) # 复制数据到粘贴板 if _...实现快捷键复制表格数据方法示例文章就介绍到这了,更多相关PyQT5 快捷键复制表格数据内容请搜索ZaLou.Cn以前文章继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

1.3K40

python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性

([‘姓名’,’性别’,’体重(kg)’]) 生成一个QTableWidgetItem对象,添加到表格00处 newItem=QTableWidgetItem(‘张三’) TableWidget.setItem...#第一单元宽度设置为150 #tableWidget.setColumnWidth(0,150) #第一单元格高度设置为120 #tableWidget.setRowHeight(0,120...优化5:合并单元格 表格第一第一单元格,更改为占据51 #合并单元格 tableWidget.setSpan(2,0,5,1) ?...优化6:设置单元格大小 这里第一宽度设置为150,高度设置为120 #第一单元宽度设置为150 tableWidget.setColumnWidth(0,150) #第一单元格高度设置为...优化7:在表格不显示分割线 QTableWidget类setShowGrid()函数是从QTableView类继承,用来设置是否显示表格分割线,默认显示分割线 #表格不显示分割线 tableWidget.setShowGrid

9.1K23

真正干货!100多条Qt开发经验,解决你开发各种问题!

原文在书212页,这样描述:Qt对所有的容器和许多其他类都使用隐含共享,隐含共享是Qt对不希望修改数据决不进行复制保证,为了使隐含共享作用发挥得最好,可以采用两个新编程习惯。...在QTableView控件,如果需要自定义按钮、复选框、下拉框等其他模式显示,可以采用自定义委托QItemDelegate来实现,如果需要禁用某,则在自定义委托重载createEditor函数返回...心中有坐标,万物皆painter,强烈建议在学习自定义控件绘制时候,qpainter.h头文件函数全部看一遍、试一遍、理解一遍,这里边包含了所有Qt内置绘制接口,对应参数都试一遍,你会发现很多新大陆...对QTableView或者QTableWidget禁用拖动。...在Qt5.10以后,表格控件QTableWidget或者QTableView默认最小宽改成了15,以前版本是0,所以在新版qt,如果设置表格宽过小,不会应用,取是最小宽。

3.7K11

PyQt5 文本输入框自动补全QLineEdit实现示例

当你想要一个列表树时,你通常会创建一个空QStandardItemModel使用appendRow()向模型添加项目,使用item()来访问项目。...如果您模型表示一个表格,您通常会将表格维度传递给QStandardItemModel构造函数,使用setItem()项目放入表格。...您可以使用findItems()在模型搜索项目,通过调用sort()对模型进行排序。 调用clear()从模型移除所有项目。...on_loginTxt_textChanged 函数处理 构建一个0新项目模型。...highlighted()信号在用户突出显示组合框弹出列表项目时发出。所有三个信号都有两个版本,一个带有str参数,另一个带有int参数。如果用户选择突出显示一个图像,则只会发出int信号。

3K20

PyQt5高级界面控件之QTableWidget(四)

:需要合并数 setShowGrid() 在默认情况下表格显示是有网格,可以设置TrueFalse用于是否显示,默认True setColumnWidth(int column,int width...QTableWidgetItem对象,添加到表格00处 newItem=QTableWidgetItem('张三') TableWidget.setItem(0,0,newItem) 优化1...#第一单元宽度设置为150 #tableWidget.setColumnWidth(0,150) #第一单元格高度设置为120...(2, 2, newItem) 优化5:合并单元格 表格第一第一单元格,更改为占据51 #合并单元格 tableWidget.setSpan(2,0,5,1) 优化6:设置单元格大小...这里第一宽度设置为150,高度设置为120 #第一单元宽度设置为150 tableWidget.setColumnWidth(0,150) #第一单元格高度设置为120 tableWidget.setRowHeight

3.6K10

常用快捷键大全

窗口控制快速键 Win+Home: 所有使用窗口以外窗口最小化(和摇动使用窗口一样意思) Win+Space:所有桌面上窗口透明化(和鼠标移到工作最右下角一样意思) Win+上方向键:...| 在选定,选取与活动单元格值不匹配单元格 Ctrl+[ 选取由选定区域中公式直接引用所有单元格 Ctrl+Shift+{ 选取由选定区域中公式直接间接引用所有单元格...Ctrl+Shift+箭头键 选定区域扩展到与活动单元格在同一同一最后一个非空单元格 Shift+Home 选定区域扩展到首 Ctrl+Shift+Home...选定区域向下扩展一屏 Shift+Page Up 选定区域向上扩展一屏 End+Shift+箭头键 选定区域扩展到与活动单元格在同一同一最后一个非空单元格...Ctrl+C, Ctrl+V:在当前行下一复制当前行内容(不用选中当前行),即复制当前行贴到下一,在两行内容差不多时很有用,可以先复制再改 Ctrl+L:删除当前行 Ctrl+M, Ctrl

4.2K10

visual studio运行程序快捷键_visual studio快捷方式在哪

Ctrl+N:去下一个书签处 Ctrl+C, Ctrl+V:在当前行下一复制当前行内容(不用选中当前行),即复制当前行贴到下一,在两行内容差不多时很有用,可以先复制再改 Ctrl+L:删除当前行...Ctrl+9 隐藏选定 Ctrl+Shift+( 取消选定区域内所有隐藏隐藏状态 Ctrl+0 隐藏选定 Ctrl+Shift+) 取消选定区域内所有隐藏隐藏状态 Ctrl+...Ctrl+\ 在选定,选取与活动单元格值不匹配单元格 Ctrl+Shift+| 在选定,选取与活动单元格值不匹配单元格 Ctrl+[ 选取由选定区域中公式直接引用所有单元格...Ctrl+Shift+箭头键 选定区域扩展到与活动单元格在同一同一最后一个非空单元格 Shift+Home 选定区域扩展到首 Ctrl+Shift+Home 选定区域扩展到工作表开始处...End+Shift+箭头键 选定区域扩展到与活动单元格在同一同一最后一个非空单元格 End+Shift+Home 选定区域扩展到工作表最后一个使用单元格(右下角) End+Shift

4.8K10

【工具】一个投工作十年MMExcel操作大全

:F2 取消单元格编辑栏输入项:ESC 编辑活动单元格清除其中原有的内容:BACKSPACE 将定义名称粘贴到公式:F3 完成单元格输入:ENTER 公式作为数组公式输入:CTRL+SHIFT...左移到非相邻选定区域:CTRL+ALT+左箭头键 12>Excel快捷键之选择单元格、 选定当前单元格周围区域:CTRL+SHIFT+*(星号) 选定区域扩展一个单元格宽度:SHIFT+...箭头键 选定区域扩展到单元格同行同最后非空单元格:CTRL+SHIFT+ 箭头键 选定区域扩展到首:SHIFT+HOME 选定区域扩展到工作表开始:CTRL+SHIFT+HOME 选定区域扩展到工作表最后一个使用单元格...模式:END 选定区域扩展到单元格同同行最后非空单元格:END, SHIFT+ 箭头键 选定区域扩展到工作表上包含数据最后一个单元格:END, SHIFT+HOME 选定区域扩展到当前行最后一个单元格.../ 选定所有带批注单元格:CTRL+SHIFT+O (字母 O) 选择不与该行内活动单元格值相匹配单元格:CTRL+\ 选中不与该内活动单元格值相匹配单元格:CTRL+SHIFT+|

3.6K40

RPA与Excel(DataTable)

Shift+箭头键 选定区域扩展到与活动单元格在同一同一最后一个非空单元格:Ctrl+Shift+箭头键 选定区域扩展到首:Shift+Home 选定区域扩展到工作表开始处:Ctrl+...选定区域扩展到与活动单元格在同一同一最后一个非空单元格:End+Shift+箭头键 选定区域扩展到工作表最后一个使用单元格(右下角):End+Shift+Home 选定区域扩展到当前行最后一个单元格...,插入参数名和括号:Ctrl+Shift+A 将定义名称粘贴到公式:F3 用SUM函数插入“自动求和”公式:Alt+=(等号) 活动单元格上方单元格数值复制到当前单元格编辑栏:Ctrl+Shift...+"(双引号) 活动单元格上方单元格公式复制到当前单元格编辑栏:Ctrl+'(撇号) 在显示单元格值和显示公式之间切换:Ctrl+`(左单引号) 计算所有打开工作簿所有工作表:F9 计算活动工作表...显示、隐藏和分级显示数据 对分组:Alt+Shift+向右键 取消分组:Alt+Shift+向左键 显示隐藏分级显示符号:Ctrl+8 隐藏选定:Ctrl+9 取消选定区域内所有隐藏隐藏状态

5.7K20

天天做饼图,你烦不烦?老板都看腻了!

作者:兰色幻想-赵志东 来源:Excel精英培训(ID:excelpx-tete) 在ExcelPPT,如果做完成率图表,99.99%的人都会选择饼图。 ? 好象也没毛病,也挺好看。...但如果我告诉你,这个图表是用柱形图做,会不会很意外?可这是真的 在Excel中有一个奇异现象,被很多图表高手用来做高阶图表:图片可以直接到图表!...2、按shift不松插入圆形,复制并按Ctrl+V粘贴到低柱子上,然后圆形改变成白色填充只留边线,再复制贴到高柱子上。 ?...3、选中实心图形,右键菜单中点“设置数据点格式,填充 - 选中层叠缩放 ? 4、在图表工具 - 设计 - 切换行/。...Excel图表可以直接到PPT,还可以粘贴成带链接格式,Excel数据更新,PPT图表也会更新。 想要工作出色,就要有自已特色,做数据分析报告、做图表也是这样。

89520
领券