24. [Python GUI] PyQt5中的模型与视图框架-表格部件QTableWidget

news2025/1/18 6:57:14

PyQt5的表格部件QTableWidget

QTableWidget 类继承自 QTableView,该类是一个由 Qt 实现的标准的表格部件,该类的数据项由 QTableWidgetItem 类管理。

当前单元格(或当前项目)与当前索引或当前选择是相同的,即可以同时选择多个单元格,但只能有一个当前单元格,当编辑单元格时,只会编辑当前单元格。当前单元格通常具有焦点边框。

单元格和项目的区别(重要概念):
项目是指 QTableWidgetItem 类的对象,因此空单元格是不含有项目的。当在空单元格上单击鼠标时,会发送 cellClicked()信号,但不会发送 itemClicked()信号。 因此当前单元格和当前项目也是有区别的。

一、QTableWidget 类中的属性和函数

1.1 属性和构造函数

  • columnCount: int
    访问函数: int columnCount() const; void setColumnCount(int);

  • rowCount: int
    访问函数: int rowCount() const; void setRowCount(int);
    以上属性描述表格的行数和列数

  • QTableWidget(QWidget *parent = Q_NULLPTR) //构造函数
    QTableWidget(int rows, int columns, QWidget *parent = Q_NULLPTR)

1.2 设置、移除、获取项目基本信息

  • void setItem(int row, int column, QTableWidgetItem *item)
    把(row, column)处的项目设置为 item,该表格取得 item 的所有权。注意:若启用了排序(按列),则会将行移至由排序确定的位置。

  • QTableWidgetItem * takeItem(int row, int column);
    从表中移除而不删除(row, column)处的项目。

  • QTableWidgetItem *item(int row, int column) const
    返回(row, column)处的项目,否则返回 0。

  • QTableWidgetItem *itemAt(const QPoint &point) const;
    返回位置 point 处的项目。使用内容坐标。

  • QTableWidgetItem *itemAt(int ax, int ay) const
    返回位置(ax, ay)处的项目。使用内容坐标。

  • QRect visualItemRect(const QTableWidgetItem *item) const
    返回项目 item 在视口上所占用的矩形(即位置和大小)。

  • int column(const QTableWidgetItem *item) const
    返回项目 item 所在的列

  • int row(const QTableWidgetItem *item) const
    返回项目 item 所在的行。

  • QList<QTableWidgetItem *> items(const QMimeData *data) const;
    返回包含在 data 中的项目列表。

1.3 当前项目

  • void setCurrentCell(int row, int column)

  • void setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags * command)

  • void setCurrentItem(QTableWidgetItem *item)

  • void setCurrentItem(QTableWidgetItem *item, QItemSelectionModel::SelectionFlags command)
    以上函数用于设置当前单元格或当前项目,除非选择模式为 NoSelection,否则当前项目会同时被选中。

  • QTableWidgetItem *currentItem() const
    返回当前项目

  • int currentColumn() const
    返回当前项目所在的列。

  • int currentRow() const
    返回当前项目所在的行。

1.4 选择项目

  • QList<QTableWidgetItem *> selectedItems() const
    返回所有被选择项目的列表(不含空单元格)。函数 QTableView::selectedIndexes()包含空单元格。

  • QList selectedRanges() const
    返回所有被选择项目的范围列表(含空单元格)。

  • void setRangeSelected(const QTableWidgetSelectionRange &range, bool select)
    选择或取消选择范围 range 指定的项目。 QTableWidgetSelectionRange 类类似于QItemSelection 用于指示选择的范围。使用方法如下:
    QTableWidgetSelectionRange r(1,1,4,4); //从左上角(1,1)到右下角(4,4)的范围
    setRangeSelected(r, true); //选择 r 指定的范围

1.5 排序、查找、编辑、 模型索引

  • void sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder)
    使表格按照列 column 进行排序,排序规则(升序或降序)由 order 指定)。

  • void editItem(QTableWidgetItem *item)
    开始编辑项目 item

  • QList<QTableWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags) const
    使用文本 text 查找项目

  • QModelIndex indexFromItem(QTableWidgetItem *item) const;
    返回与 item 关联的模型索引。

  • QTableWidgetItem *itemFromIndex(const QModelIndex &index) const;
    返回与 index 关联的项目

1.6 表头

  • int visualColumn(int logicalColumn) const
    返回逻辑列 logicalColumn 处的可视列(与 QHeaderView 类中的逻辑索引原理相同)。

  • int visualRow(int logicalRow) const;
    返回逻辑行 logicalColumn 处的可视行。

  • QTableWidgetItem *horizontalHeaderItem(int column) const
    void setHorizontalHeaderItem(int column, QTableWidgetItem *item)
    void setHorizontalHeaderLabels(const QStringList &labels)
    QTableWidgetItem *verticalHeaderItem(int row) const
    以上函数用于设置标头,其原理与 QStandardItemView 类中的相应函数相同。

1.7 持久编辑器、 部件、项目原型

  • QWidget *cellWidget(int row, int column) const
    返回单元格(row, column)处的部件

  • void setCellWidget(int row,int column,QWidget *widget);
    把部件设置到位置(row, column)处

  • void removeCellWidget(int row, int column)
    删除单元格(row,column)处的部件。

  • void closePersistentEditor(QTableWidgetItem*item)
    关闭持久编辑器(见 QAbstractItemView)

  • void openPersistentEditor(QTableWidgetItem *item)
    打开持久编辑器

  • bool isPersistentEditorOpen(QTableWidgetItem *item) const
    持久编辑器是否打开。 qt5.10

  • const QTableWidgetItem *itemPrototype() const
    返回该表格的项目原型

  • void setItemPrototype(const QTableWidgetItem *item)
    设置 item 为该表格的项目原型。该表格取得项目原型的所有权。

1.8 槽

  • void clear() //删除视图中的所有项目(包含标头)
  • void clearContents() //删除视图中的数据项(不含标头)
  • void insertColumn(int column) //在 column 处插入一个空列
  • void insertRow(int row) //在 row 处插入一个空行
  • void removeColumn(int column) //移除列 column 及在其上的项目
  • void removeRow(int row) ///移除行 row 及在其上的项目
  • void scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible)
    滚动视图以使项目 item 可见。 QAbstractItemView::ScrollHint 枚举见相关类

1.9 信号

  • void cellActivated(int row, int column) 激活单元格时发送。
    void itemActivated(QTableWidgetItem *item) //项目被激活时发送。
    windows 下激活是指在单元格上按下回车键, 具体取决于系统。

  • void cellClicked(int row, int column) //单击单元格时发送
    void itemClicked(QTableWidgetItem *item) //单击表格中的项目就发送此信号

  • void cellPressed(int row, int column) //单击单元格时发送
    void itemPressed(QTableWidgetItem *item) //当按下表格中的项目时,发送此信号

  • void cellDoubleClicked(int row, int column) //双击单元格时发送
    void itemDoubleClicked(QTableWidgetItem *item) //双击表格中的项目就发送此信号

  • void cellEntered(int row, int column) //鼠标进入(需开启鼠标跟踪)单元格时发送
    void itemEntered(QTableWidgetItem *item) //当鼠标光标进入项目时(需开启鼠标跟踪)发送

  • void cellChanged(int row, int column) //单元格中的数据发生更改时发送。
    void itemChanged(QTableWidgetItem *item) //当项目的数据项变化时,发送此信号。

  • void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
    当当前单元格发生变化时,发送此信号。

  • void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
    当当前项目发生变化时,发送此信号。

  • void itemSelectionChanged() //当选择改变时,发送此信号

1.10 其他函数(主要用于处理拖放,与 QAbstractItemModel 类中的相应函数类似)

  • virtual bool dropMimeData(int row, int column, const QMimeData *data, Qt::DropAction action)
  • virtual QMimeData * mimeData(const QList<QTableWidgetItem *> items) const
  • virtual QStringList mimeTypes() const
  • virtual Qt::DropActions supportedDropActions() const

二、QTableWidgetItem类

QTableWidgetItem 是一个独立的类, 该类用于向 QTableWidget 类提供数据项。

以下函数主要用于设置项目数据,在前面章节已见过,下面以表格的形式列出:
20221128002451

其他的一些函数如下:

  • QTableWidget * tableWidget() const //返回该项目的表格部件
  • int column() const//返回表格中项目所在的列,若项目不在表格中,则返回-1。
  • int row() const //返回表格中项目所在的行,若项目不在表格中,则返回-1。
  • virtual QVariant data(int role) const
    virtual void setData(int role, const QVariant &value)
    把角色 role 的数据设置为 value,该函数可用于添加整型、浮点型等类型的数据。
  • virtual void read(QDataStream &in); //从流中读取项目
  • virtual void write(QDataStream &out) const; //把项目写入流中
  • virtual QTableWidgetItem *clone() const; //创建该项目的副本。
  • int type() const
    返回该数据项的类型,返回的类型主要用于区分是否是自定义类型,返回的值应是枚举
    ItemType 的成员所对应的整数值,见下表:
    20221128002708

三、QTableWidget部件的示例代码

示例代码如下:

from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
import sys

if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setStyle('Fusion')
    
    my_table_widget = QTableWidget(3, 3)    # 构造一个3*3的table
    
    # 创建一些item
    item1 = QTableWidgetItem('AAA')
    
    # 整数值需要使用setData函数添加
    item2 = QTableWidgetItem()
    item2.setData(Qt.ItemDataRole.DisplayRole, 222)
    
    item3 = QTableWidgetItem()
    item3.setIcon(QIcon('C:\\Users\\hubing\\Pictures\\QQ图片20200112144947.jpg'))
    item3.setText('BBB')
    
    item4 = QTableWidgetItem('CCC')
    item5 = QTableWidgetItem('DDD')

    # 将数据项添加到表格里
    my_table_widget.setItem(0, 0, item1)
    my_table_widget.setItem(0, 1, item2)
    my_table_widget.setItem(1, 0, item3)
    my_table_widget.setItem(2, 1, item4)
    my_table_widget.setItem(2, 2, item5)
    
    my_table_widget.show()
    
    sys.exit(app.exec_())

运行效果如图:

20221128005448

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spark 3.0 - 7.LR 多分类实现影评预测电影评分与指标评测

目录 一.引言 二.LR 多分类分析 三.LR 多分类实战 1.数据准备 Comment -> RDD -> DF 2.数据处理 JieBaTokenizer -> HashingVector 3.模型训练 LR 4.模型评估 Metrics 5.人工校验 DIY 四.总结 一.引言 Spark 3.0 - 5.ML Pipeline 实战之电影影评情感分析 通…

浅析数据采集工具Flume

title: Flume系列 第一章 Flume基础理论 1.1 数据收集工具产生背景 Hadoop 业务的一般整体开发流程&#xff1a; 任何完整的大数据平台&#xff0c;一般都会包括以下的基本处理过程&#xff1a; 数据采集 数据 ETL 数据存储 数据计算/分析 数据展现 其中&#xff0c;数据…

Nacos注册中心和服务方式

目录 一、服务治理介绍 常见的注册中心 二、Nacos注册中心介绍 三、运用Nacos搭建环境 四、DiscoveryClient实现负载均衡 五、Ribbon实现负载均衡 六、基于Feign实现服务调用 七、Feign传参 一、服务治理介绍 通过上一章的操作&#xff0c;我们已经可以实现微服务之间的调…

【Android +Tensroflow Lite】实现从基于机器学习语音中识别指令讲解及实战(超详细 附源码)

需要源码和配置文件请点赞关注收藏后评论区留言~~~ 一、基于机器学习的语音推断 Tensorflow基于分层和模块化的设计思想&#xff0c;整个框架以C语言的编程接口为界&#xff0c;分为前端和后端两大部分 Tensorflow框架结构如下图 二、Tensorflow Lite简介 虽然Tensorflow是一…

WMS类图结构分析-android12

为什么要分析类图&#xff1f; WMS是一个复杂的模块&#xff0c;就像一个很大的家族&#xff0c;里面有各种角色&#xff0c;认识类图就像是认识WMS模块中的各个角色&#xff0c;不先把人认清楚了&#xff0c;怎么更好的理解他们之间的交互&#xff1f; 我觉得&#xff0c;这…

【MATLAB教程案例47】基于双目相机拍摄图像的三维重建matlab仿真

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 本课程学习成果预览: 目录 1.软件版本 2.基于双目相机拍摄图像的三维重建原理概述

GII全球创新指数2013-2020

1、数据来源&#xff1a;世界知识产权组织发布的《2021年全球创新指数报告》 2、时间跨度&#xff1a;2013-2020 3、区域范围&#xff1a;全球 4、指标说明&#xff1a; 全球创新指数&#xff08;Global Innovation Index&#xff0c;GII&#xff09;是世界知识产权组织、康…

20221127-1Spring_day01(资料来自黑马程序)

Spring_day01 今日目标 掌握Spring相关概念完成IOC/DI的入门案例编写掌握IOC的相关配置与使用掌握DI的相关配置与使用 1&#xff0c;课程介绍 对于一门新技术&#xff0c;我们需要从为什么要学、学什么以及怎么学这三个方向入手来学习。那对于Spring来说: 1.1 为什么要学? …

Reactive UI -- 反应式编程UI框架入门学习(一)

反应式编程 反应式编程是一种相对于命令式的编程范式&#xff0c;由函数式的组合声明来构建异步数据流。要理解这个概念&#xff0c;可以简单的借助Excel中的单元格函数。 上图中&#xff0c;A1B1C1&#xff0c;无论B1和C1中的数据怎么变化&#xff0c;A1中的值都会自动变化&a…

Kafka - 08 Kafka Broker工作流程 | 节点服役 | 节点退役

文章目录1. Kafka Broker 工作流程2. Kafka 节点服役1. 增加一个Kafka节点2. 执行负载均衡操作3. Kafka 节点退役1. Kafka Broker 工作流程 Kafka上下线时Zookeeper中的数据变化&#xff1a; [zk: localhost:2181(CONNECTED) 9] ls / [zookeeper, kafka_cluster][zk: localhost…

使用nw.js快速开发一个基于浏览器的小型桌面端(适用于高校学生实验作业)

首先讲下退坑事项&#xff0c;节约读者时间 生成的exe会依赖SDK文件夹下的一些dll&#xff0c;所以不能简单的交付这个exe&#xff0c;需要使用额外的软件进行打包&#xff0c;如Enigma Virtual Box、inno setup自定义可执行文件的icon也要额外软件&#xff0c;如Resource Hac…

SCDM 实例教程:基本几何建模

作者 | 张杨 ANSYS SpaceClaim Direct Modeler&#xff08;简称 SCDM&#xff09;是基于直接建模思想的新一代3D建模和几何处理软件。SCDM可以显著地缩短产品设计周期&#xff0c;大幅提升CAE分析的模型处理质量和效率&#xff0c;为用户带来全新的产品设计体验。 本文将主要…

常用 CMD 命令

前言 作为一个程序员&#xff0c;可能更多的是在 Linux 中使用命令来操作。但在日常使用 Windows 的过程中&#xff0c;或多或少会使用到命令提示符窗口&#xff0c;也就是 Windows 中的 CMD。这个时候&#xff0c;掌握一些常用的命令就尤为重要了&#xff0c;一方面方便自己使…

排序-指标解读

一、ROC ROC曲线全称是(receiver operating characteristic cure)受试者工作特征曲线。 首先大家看到这里肯定会好奇&#xff0c;为啥名字这么奇怪&#xff0c;来一波背景介绍先。 “ROC起先应用于军事领域&#xff0c;据说在第二次世界大战期间&#xff0c;ROC 曲线最先是由…

几分钟快速学会Linux开启启动服务

背景 最近在银行遇到一个部署问题&#xff0c;uat、prod 两个环境的ECS中的服务要求制作好基础镜像&#xff0c;上环境的时候只需要在对应的ECS中选择更换系统即可&#xff0c;不允许传统连接SSH上去安装&#xff0c;这就要求我们就得提前把需要运行的服务内置到系统中&#x…

债券数据集:绿色债券数据集、历时新发、发行债券、DCM定价估值四大指标数据

1、绿色债券数据集 1、数据来源&#xff1a;wind 2、时间跨度&#xff1a;2016.01-2021.11年 3、区域范围&#xff1a;全国 4、指标说明&#xff1a; 部分指标如下&#xff1a; 数据截图如下&#xff1a; 2、历史新发债券数据库 1、数据来源&#xff1a;wind 2、时间跨度…

领悟《信号与系统》之 傅立叶变换的性质与应用

傅立叶变换的性质与应用一、傅里叶变换性质表二、傅里叶性质详细1. 线性性质2. 尺度变换特性3. 时移特性4. 频移特性5. 时域微分特性6. 频域微分特性7. 时域积分特性8. 频域积分特性9. 卷积定理1. 时域卷积定理2. 频域卷积定理10. 对称性11. 帕塞瓦尔定理依据傅里叶变换对概念&…

xxl-job 快速使用

xxl-job 快速使用xxl-job 简单使用注意事项执行xxl-job 简单使用 xxl-job 官方使用说明 XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 注意事项 详细可…

【Canvas】js用Canvas绘制阴阳太极图动画效果

学习JavaScript是否兴趣缺缺&#xff0c;那就需要来一个兴趣学习&#xff0c;问一下有没有兴趣用Canvas画图呢&#xff0c;可以画很多有趣的事物&#xff0c;自由发挥想象&#xff0c;收获多多哦&#xff0c;这里有一个例子&#xff0c;如何用canvas画阴阳太极图动图效果&#…

王道考研——操作系统(第二章 进程管理)(死锁)

一、死锁的概念 什么是死锁 死锁、饥饿、死循环的区别 死锁产生的必要条件 什么时候会发生死锁 死锁的处理策略 知识回顾与重要考点 二、死锁的处理策略——预防死锁 知识总览 破坏互斥条件 破坏不剥夺条件 破坏请求和保持条件 破坏循环等待条件 知识回顾与重要考点 与前面哲…