
1.2 表格控件QTableWidget及其项QTableWidgetItem
在PySide6中,使用QTableWidget类表示表格控件,表格控件由多行多列组成,并且含有行表头和列表头。表格控件的每个单元格称为项,使用QTableWidgetItem表示表格控件的项。
1.2.1 表格控件QTableWidget
在PySide6中,使用QTableWidget类创建表格控件。QTableWidget类是QTableView类的子类,位于PySide6的QtWidgets子模块下,其继承关系如图1-1所示。QTableWidget类的构造函数如下:
QTableWidget(parent:QWidget=None) QTableWidget(rows:int,columns:int,parent:QWidget=None)
其中,parent表示父窗口或父控件;rows表示行的数量;columns表示列的数量。
QTableWidget类的常用方法见表1-5。
表1-5 QTableWidget类的常用方法

续表

【实例1-5】 创建一个窗口,该窗口包含一个表格控件。设置表格控件的表头,并添加两行数据,代码如下:

运行结果如图1-14所示。

图1-14 代码demo5.py的运行结果
在PySide6中,可以使用Qt Designer在窗口中创建表格控件。
【实例1-6】 使用Qt Designer设计一个包含表格控件的窗口,向表格控件中添加3行数据。操作步骤如下:
(1)打开Qt Designer软件,创建一个Widget类型的窗口,如图1-15所示。
(2)将工具箱中的TableWidget控件拖曳到主窗口,如图1-16所示。
(3)选中主窗口上的TableWidget控件,右击,在弹出的菜单栏中选择“编辑项目”,此时会弹出一个“编辑表格窗口部件”对话框,如图1-17和图1-18所示。

图1-15 创建的窗口

图1-16 拖曳TableWidget控件

图1-17 右击后弹出的菜单
(4)在“编辑表格窗口部件”对话框的“列”选项卡中,单击左下角的加号图标可以为表格控件添加列,单击左下角的减号图标可以删除当前列。依次添加5列表头,如图1-19所示。

图1-18 “编辑表格窗口部件”对话框

图1-19 为表格控件添加表头
(5)在“编辑表格窗口部件”对话框的行选项卡中,单击左下角的加号图标可以为表格控件添加行,单击左下角的减号图标可以删除当前行。依次添加3行,如图1-20所示。

图1-20 为表格控件添加行
(6)在“编辑表格窗口部件”对话框中,单击“确定”按钮,可查看已经添加行和列的表格控件,如图1-21所示。
(7)再次打开“编辑表格窗口部件”对话框,然后在项目选项卡下依次添加3行数据,添加完数据后,单击“确定”按钮,如图1-22和图1-23所示。

图1-21 已经添加行和列的表格控件

图1-22 表格控件的3行数据

图1-23 添加数据后的主窗口
(8)将主窗口的标题修改为QTableWidget,将主窗口的布局设置为水平布局,然后将设计的窗口文件命名为demo6.ui,并保存在D盘的Chapter1文件夹下,在Windows命令行窗口将demo6.ui文件转换为demo6.py,操作过程如图1-24所示。

图1-24 将demo6.ui文件转换为demo6.py
(9)编写业务逻辑代码,代码如下:

运行结果如图1-25所示。

图1-25 代码demo6_main.py的运行结果
在PySide6中,QTableWidget类的信号见表1-6。
表1-6 QTableWidget类的信号

1.2.2 QTableWidgetItem类
在PySide6中,使用QTableWidgetItem类创建表格控件的表格项。QTableWidgetItem类的构造函数如下:
QTableWidgetItem(type=QTableWidgetItem.Type) QTableWidgetItem(str,type=QTableWidgetItem.Type) QTableWidgetItem(QIcon,str,type=QTableWidgetItem.Type)
其中,type的取值为QTableWidgetItem.Type(默认值,值为1)或QTableWidgetItem.UserType(值为1000),QTableWidgetItem.UserType也是用户自定义类型的最小值;str表示表格项的文本;QIcon表示表格项的图标。
QTableWidgetItem类的常用方法见表1-7。
表1-7 QTableWidgetItem类的常用方法

【实例1-7】 创建一个窗口,该窗口包含一个表格控件、5个按钮控件。这5个按钮分别实现添加列、删除列、添加行、删除行、全选含有文本的表格项的功能,代码如下:


运行结果如图1-26所示。

图1-26 代码demo7.py的运行结果
1.2.3 使用表格控件处理CSV文件
在PySide6中,可以使用表格控件(QTableWidget)处理CSV文件,不过这需要应用Python内置模块CSV。如果读者不了解CSV模块,则可以查看《编程改变生活——用Python提升你的能力(进阶篇·微课视频版)》的第2章内容。
【实例1-8】 创建一个窗口,该窗口包含一个表格控件、两个按压按钮。这两个按钮分别实现打开CSV文件、保存CSV文件的功能,代码如下:



运行结果如图1-27所示。

图1-27 代码demo8.py的运行结果
注意:中文的编码方式主要有GBK和UTF-8,根据文件的编码方式,需要设置对应的编码方式才能打开包含中文的CSV文件。
1.2.4 使用表格控件处理Excel文件
在PySide6中,可以使用表格控件(QTableWidget)处理Excel文件(扩展名为.xlsx的文件),不过这需要应用Python第三方模块openpyxl。如果读者不了解openpyxl模块,则可以查看《编程改变生活——用Python提升你的能力(进阶篇·微课视频版)》的第1章内容。
【实例1-9】 创建一个窗口,该窗口包含一个表格控件、两个按压按钮。这两个按钮分别实现打开Excel文件、保存Excel文件的功能,代码如下:


运行结果如图1-28所示。

图1-28 代码demo9.py的运行结果