![编程改变生活:用PySide6/PyQt6创建GUI程序(进阶篇·微课视频版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/921/52841921/b_52841921.jpg)
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类的常用方法
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T28_133798.jpg?sign=1738908961-fVLvEqFSmbmjBQtk92O12kmjfmT2FjYF-0-1605eeffdf0193c2940bbc5d52eb1755)
续表
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T29_133800.jpg?sign=1738908961-FHVZ4ZTF4P1CmMo73MRLXdL6BPEILwMA-0-6cfe89f8e864f23316f5f438dc1c51bd)
【实例1-5】 创建一个窗口,该窗口包含一个表格控件。设置表格控件的表头,并添加两行数据,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P29_136916.jpg?sign=1738908961-j8y1lsf2r4xGpliUk21uTmhcuh3wunTp-0-690d209a289d89f2b110adb3def00720)
运行结果如图1-14所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P30_93088.jpg?sign=1738908961-dSRRoShtrS6rdy2E0eHoz3dzeGgt9CT2-0-2e495a78ac4aced4f6920b6a09070634)
图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所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P31_93094.jpg?sign=1738908961-jVKZapM7h9LbGc3lMeiyeZiRqqOx2gZ4-0-1107df4062e1cacc49e0cd4633b51cd7)
图1-15 创建的窗口
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P31_93097.jpg?sign=1738908961-GX5N6LuWGxclNhxRE6JuqlDseS43EYEB-0-7b5d0c739ea8eddd433bcd613fc709bd)
图1-16 拖曳TableWidget控件
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P31_93100.jpg?sign=1738908961-mbLPqsqHUzFrdKYnWnKJkfi3MpxAjSpE-0-abb194c98405156479b06319c9aef57b)
图1-17 右击后弹出的菜单
(4)在“编辑表格窗口部件”对话框的“列”选项卡中,单击左下角的加号图标可以为表格控件添加列,单击左下角的减号图标可以删除当前列。依次添加5列表头,如图1-19所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P32_93106.jpg?sign=1738908961-05LC8KEhijt0RjMXNEtIagiLtTawv9wG-0-c140ba9f5965183fbcc11a973c17be9b)
图1-18 “编辑表格窗口部件”对话框
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P32_93109.jpg?sign=1738908961-kiG4rDEgFmP9A3YmpeBrYRjKVszpuiF3-0-4bd734091934a2f10bd3d96326c69894)
图1-19 为表格控件添加表头
(5)在“编辑表格窗口部件”对话框的行选项卡中,单击左下角的加号图标可以为表格控件添加行,单击左下角的减号图标可以删除当前行。依次添加3行,如图1-20所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P32_93112.jpg?sign=1738908961-Ylo8I9pE9DmDV8ZB4grCAHHsTIcBrUPi-0-5fe3d75221b2721b914dbb0c37801dd4)
图1-20 为表格控件添加行
(6)在“编辑表格窗口部件”对话框中,单击“确定”按钮,可查看已经添加行和列的表格控件,如图1-21所示。
(7)再次打开“编辑表格窗口部件”对话框,然后在项目选项卡下依次添加3行数据,添加完数据后,单击“确定”按钮,如图1-22和图1-23所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P32_93116.jpg?sign=1738908961-QabKOfnmmsJFvb4dn782yOJUTf2gvzai-0-0d55bf89c5da712df465ad59b6a8ea84)
图1-21 已经添加行和列的表格控件
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P33_93121.jpg?sign=1738908961-kS7ONXOrz9u4mV1A0gjTdI59kFwkagzW-0-ac190928953154e7d05203993f5403fd)
图1-22 表格控件的3行数据
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P33_93124.jpg?sign=1738908961-7nERpAwYbj7VZ3qyvUo4GzkHkBg3zDMn-0-3557ecf7d09fc934eb82b1d1ad5d6c5d)
图1-23 添加数据后的主窗口
(8)将主窗口的标题修改为QTableWidget,将主窗口的布局设置为水平布局,然后将设计的窗口文件命名为demo6.ui,并保存在D盘的Chapter1文件夹下,在Windows命令行窗口将demo6.ui文件转换为demo6.py,操作过程如图1-24所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P33_93128.jpg?sign=1738908961-PfswMANfxxrVsj1Alm7P9gHpYaL4RXwy-0-5087617c95e2334253e0f4c5a6f5732b)
图1-24 将demo6.ui文件转换为demo6.py
(9)编写业务逻辑代码,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P33_136920.jpg?sign=1738908961-VcgZslLmZ0O0IlKuR1ddmKS9Aw8Ig054-0-7c0820cb61da8746b7b02b3341d56ebe)
运行结果如图1-25所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P34_93150.jpg?sign=1738908961-w4Xd84Dy8v7hFC7XDKbqW39yN2bcdyT5-0-359a9393c1f72f23fcb47238cd4ed0c1)
图1-25 代码demo6_main.py的运行结果
在PySide6中,QTableWidget类的信号见表1-6。
表1-6 QTableWidget类的信号
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T34_133802.jpg?sign=1738908961-QQWdy1lQpC89krSRxzPgBP02tcHfm9zW-0-5936f0278e5397b3ec763617ac85375e)
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类的常用方法
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T35_137128.jpg?sign=1738908961-Gznv6PzcdklVRffnskMbWFOUn90J4F4L-0-2c20b47bcabc7bf05fab6169aba1a010)
【实例1-7】 创建一个窗口,该窗口包含一个表格控件、5个按钮控件。这5个按钮分别实现添加列、删除列、添加行、删除行、全选含有文本的表格项的功能,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P36_137131.jpg?sign=1738908961-f5I8Q3IG7mWgGSM735EnFtUzflBk1dPq-0-69e9c3d70a9d386bfc22f2682d9e9eb0)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P37_137132.jpg?sign=1738908961-60tbFSgO1a8HewGDh2ylPEHPs9tVO1On-0-427355f4b04b614b15ea90bbd53bbff9)
运行结果如图1-26所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P38_93541.jpg?sign=1738908961-9LNmj6wOUv8PtJCjKALZkmTU3piRyZ2c-0-d6cceeff176292ba2df46fcd760f213f)
图1-26 代码demo7.py的运行结果
1.2.3 使用表格控件处理CSV文件
在PySide6中,可以使用表格控件(QTableWidget)处理CSV文件,不过这需要应用Python内置模块CSV。如果读者不了解CSV模块,则可以查看《编程改变生活——用Python提升你的能力(进阶篇·微课视频版)》的第2章内容。
【实例1-8】 创建一个窗口,该窗口包含一个表格控件、两个按压按钮。这两个按钮分别实现打开CSV文件、保存CSV文件的功能,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P38_137134.jpg?sign=1738908961-QvFRVoeMNamAiDW4NaZvUiIsupKVpW8T-0-3399b1d92f1f03337c511cc958ae0882)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P39_137136.jpg?sign=1738908961-YiphgKV9kAiLwDuh01zuuCbuNibdgxqn-0-8217af2919f993166567788cc639bfdf)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P40_137172.jpg?sign=1738908961-1lhJ0Te5ZG0Ltp6ym92Bpdd5H5gM3MHj-0-d9a9da74c000a6e40f393c0b1bb96090)
运行结果如图1-27所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P40_137147.jpg?sign=1738908961-vc0viIGNGCTxGJWv7Jw0UTsIe76Voruf-0-7c6c87add3120e625592f87a6c8811fe)
图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文件的功能,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P41_137174.jpg?sign=1738908961-ZyXx9pkQsRS5hvF4b7J24C8iZF9V2V5f-0-9abb6f2580060b9a376d9130a4014d8f)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P42_137175.jpg?sign=1738908961-MmA7R8eHYxOgYRzg7UQFgj9boU6qoM26-0-68b48a6ccc9653c04ee97bab283ee2e6)
运行结果如图1-28所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P42_93620.jpg?sign=1738908961-NYoHXMU4uYflhLIFKgNt9JPeMrtW4pAj-0-7b80eb9fbd882cc555cae0831b62fbdb)
图1-28 代码demo9.py的运行结果