![编程改变生活:用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=1739367524-k9npoFiZeP4U3gFdf4go2v9GXETPnCVV-0-86ac04a56c198de236b14a70edaedeb2)
续表
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T29_133800.jpg?sign=1739367524-Y0oow0It8DU9WrOXHOjtBMwQwiZsjLP3-0-015fc6393bace4d28dd8c42dee851519)
【实例1-5】 创建一个窗口,该窗口包含一个表格控件。设置表格控件的表头,并添加两行数据,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P29_136916.jpg?sign=1739367524-7EclLD0A1lHnXjEktC4Pmb4B7yvyFCla-0-37be402ede371732648d42db18b66838)
运行结果如图1-14所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P30_93088.jpg?sign=1739367524-ByfVAwWpgpIDhjqab5TDIaJBiO8mpkZt-0-5583c5ec585683475409a2bce3600a16)
图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=1739367524-B7lwea2c3h48aB6jGVqTxRwxfzmvQWY9-0-876d09260413648dd3c3ae65107b7ac1)
图1-15 创建的窗口
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P31_93097.jpg?sign=1739367524-EgYQGImtSLDlTxacEkbGVzWpLygi5DSb-0-339fa3605ba68052e7f71c331fc9cd9b)
图1-16 拖曳TableWidget控件
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P31_93100.jpg?sign=1739367524-sasag2YV4GpVGc5y5ylU3OasqtDnVbFp-0-351fb9b24d61d141e317b78a95d18e92)
图1-17 右击后弹出的菜单
(4)在“编辑表格窗口部件”对话框的“列”选项卡中,单击左下角的加号图标可以为表格控件添加列,单击左下角的减号图标可以删除当前列。依次添加5列表头,如图1-19所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P32_93106.jpg?sign=1739367524-OccERAiVu93jLq1R0ZHL6oAFE7EktfKj-0-96f299e75838ec158fd15a87f57c35cc)
图1-18 “编辑表格窗口部件”对话框
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P32_93109.jpg?sign=1739367524-gAZAu7KHiCLbpaiDVpghaAoPZAZN31pl-0-22566acc51e728bf6477bf4eb9162cf1)
图1-19 为表格控件添加表头
(5)在“编辑表格窗口部件”对话框的行选项卡中,单击左下角的加号图标可以为表格控件添加行,单击左下角的减号图标可以删除当前行。依次添加3行,如图1-20所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P32_93112.jpg?sign=1739367524-sFK45XoolU76FihAuVJxqhSqbMhoVcIQ-0-9c00b0f48a19efb1570dc796839d006c)
图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=1739367524-mTKS6PXa5qzgEzxda67xq1yex01HxFVh-0-84d85ac2d0b0207f207db4e429f6b99f)
图1-21 已经添加行和列的表格控件
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P33_93121.jpg?sign=1739367524-QLvDREzvyqvxMTMDSUmGepyQ0x2Lx2Xi-0-a1171cf2d9f5e56f9c40a4ad1071a7c1)
图1-22 表格控件的3行数据
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P33_93124.jpg?sign=1739367524-RTBmnaiyzvec2niizLspLuu52AsFV62L-0-a694463ccc9f82c66bc5e814b7bc98bf)
图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=1739367524-0t8gY6PfMXWvacYhGZTp9h6XmS7ewymY-0-8e5c884b9887b3f00f896b5afe16d15e)
图1-24 将demo6.ui文件转换为demo6.py
(9)编写业务逻辑代码,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P33_136920.jpg?sign=1739367524-1pzQMXgxADzeJP8UGO0YUqXeQM6tVe0h-0-a67a0a557a27348715e6e5021bb8a4b0)
运行结果如图1-25所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P34_93150.jpg?sign=1739367524-nIdvWG1TCGv0FRTMJGDvHFZfUMGWuWlT-0-ce563c0fe11f3b62ea32e9202950ca36)
图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=1739367524-oAjhcsicKLWO3eSqAW30gGKsVgxTKHvl-0-e158c043dc4b1d36247231f237a6080c)
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=1739367524-ZhuJCQCgL1rtEQAKqhbndDAyPf24JWXP-0-741a8e8adb781d6b1af356b867946a5b)
【实例1-7】 创建一个窗口,该窗口包含一个表格控件、5个按钮控件。这5个按钮分别实现添加列、删除列、添加行、删除行、全选含有文本的表格项的功能,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P36_137131.jpg?sign=1739367524-qKoUkDZyBhq2z7o5igXSyxZPx5N7WBMS-0-85332e59f5c7abba7ee6a16f83ed365f)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P37_137132.jpg?sign=1739367524-VAS2iXtVSTLfziDkW7QkL1E5Q6XjYTZ8-0-e3ce7ce5f59f7fe7f052088845f569a7)
运行结果如图1-26所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P38_93541.jpg?sign=1739367524-NoyoQVPiZp9pqejdcMGkckTMIkGqCdqL-0-d90adf6414d9daa98e261ee3f2519dba)
图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=1739367524-Sgw5lYTW4Ws4OCkKULI6AT4x8703BoGg-0-9ec2ca4c30e5c24019f56397a195c67d)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P39_137136.jpg?sign=1739367524-a5R4q2uxgXT7FhPul0SMQU4SSfqlD1ro-0-0dfdb261b1538c9e4c593ee1a6b26fbe)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P40_137172.jpg?sign=1739367524-uAI7kLpXnuEB8RCj2LRFjrZNJon5t2mw-0-4a7eebb4456a34dd3be2d99bb241423d)
运行结果如图1-27所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P40_137147.jpg?sign=1739367524-TzO420q6iDkeZcs0xF8fLW5sjuzqG853-0-6b665f598a5cfb8d73ee3407e42b1756)
图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=1739367524-u1xEibUBj8EhEUrRQsKQtMyIpVo5O2oE-0-c2be916c11361264428967d9344fc569)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P42_137175.jpg?sign=1739367524-olAYcazlLwhexEryLLVWywpPNELS1tti-0-47ec2b06358e880d42c37ee203b29e9f)
运行结果如图1-28所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P42_93620.jpg?sign=1739367524-TJugi1XIuFd4YGd4pMNXNvOcZhKJpXii-0-0f32f7ce0015d90c0ab40a41c2560cad)
图1-28 代码demo9.py的运行结果