![编程改变生活:用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=1739174073-lwGcqZms4W9uhAcSgCGKDXLbVjMoVnce-0-57ca6c78d989309baac4cb2658f7c5a1)
续表
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T29_133800.jpg?sign=1739174073-e3EPUPvhCvBuhxbeth7wNTtq2NizvR6j-0-e24ba01e540281cd2ee065a1774f8f32)
【实例1-5】 创建一个窗口,该窗口包含一个表格控件。设置表格控件的表头,并添加两行数据,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P29_136916.jpg?sign=1739174073-7IvYyjTfbGdkLRz9s2KR6GHcBwJW1h3G-0-f165d10bec633e778a59d16526f399af)
运行结果如图1-14所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P30_93088.jpg?sign=1739174073-2nHiorOKUNuiaRo80TqiRzTL3R978cQb-0-85713d16f1c75eab15f5aebbe5327503)
图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=1739174073-AJkEE7cnYIFXIjpBoseG97jUzoSH1clv-0-e4df0c624147765a16c093fea100d02a)
图1-15 创建的窗口
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P31_93097.jpg?sign=1739174073-GsgsGrbyc0vcgStmhSzBJz3Pmh47GAiI-0-33c0260acdca00d5365ce0a34f8356cf)
图1-16 拖曳TableWidget控件
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P31_93100.jpg?sign=1739174073-yoo4UwLcyKcGcPhCznJ8TaHpQQY3sfZf-0-34da50d8b26c3d2d56a5cc779e960fe0)
图1-17 右击后弹出的菜单
(4)在“编辑表格窗口部件”对话框的“列”选项卡中,单击左下角的加号图标可以为表格控件添加列,单击左下角的减号图标可以删除当前列。依次添加5列表头,如图1-19所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P32_93106.jpg?sign=1739174073-XPN9JZSYxgGQXatGMiyrdEuZ46rHirgO-0-37886cf981d7a3290daa011628c94dcf)
图1-18 “编辑表格窗口部件”对话框
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P32_93109.jpg?sign=1739174073-Ve3ZzaolM6zMhIzpFLpGIio8NuCUFxHU-0-57b518e6a2505868ede4d7c0439b5af8)
图1-19 为表格控件添加表头
(5)在“编辑表格窗口部件”对话框的行选项卡中,单击左下角的加号图标可以为表格控件添加行,单击左下角的减号图标可以删除当前行。依次添加3行,如图1-20所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P32_93112.jpg?sign=1739174073-zTkhzyzU175VRhlOIfW0rZ9aCtJ4wOzh-0-d8f917db86eab04ddfa167233e9b412a)
图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=1739174073-a3N5kfhSSVbabel8FFnJmrUzoWpt49LX-0-74961354a1b0e19ddb190872c714c5f0)
图1-21 已经添加行和列的表格控件
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P33_93121.jpg?sign=1739174073-XzvrU2VwzclLaPt9yzaeVPeBPQWdFrtA-0-c84ff729d9f9839481f223c8d0f244a7)
图1-22 表格控件的3行数据
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P33_93124.jpg?sign=1739174073-0CUgHUwQ9gLuzXaO1DH69UArRQkHJMQm-0-8ffdeffffee646aa80babc2044bf4b64)
图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=1739174073-HsH9SL0Blmfngr8Uiio7xaFZzVmIjSUH-0-c8caf9d96ca662a731e855afa3d05755)
图1-24 将demo6.ui文件转换为demo6.py
(9)编写业务逻辑代码,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P33_136920.jpg?sign=1739174073-ls6fp8DBIm9ZzUHfz3dqbp1gqDSShzmb-0-e028601656aa5f83d3758aa01e63cdbd)
运行结果如图1-25所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P34_93150.jpg?sign=1739174073-JhlmIM75WpgrviTo4P1wtGFHAwdIckFj-0-496d5928ce6fb2be1b80faf85e48ec0a)
图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=1739174073-yNRl6eyWHfg6fnJUJL9ijvBIrpF41mBO-0-e52e82780728582e6d1206e8efdc8bba)
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=1739174073-UfMDOv8wh5jcbykAGDLZcK6LPoJLgGAW-0-6ac5f415956254b2c14671ecd9b09c49)
【实例1-7】 创建一个窗口,该窗口包含一个表格控件、5个按钮控件。这5个按钮分别实现添加列、删除列、添加行、删除行、全选含有文本的表格项的功能,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P36_137131.jpg?sign=1739174073-RMLJpwfd7MmTju5yQj0twEFnFj1wZfA8-0-d77297db4c6f5528228f6add142caf73)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P37_137132.jpg?sign=1739174073-CVfCec1zRH0UpQAygWOXgNo0x6fjChO3-0-70b00c94acaddb9bf4ef8afa6e3dfb55)
运行结果如图1-26所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P38_93541.jpg?sign=1739174073-qGW8MjSF6u6Qu3m2KnwAldTthncmsy91-0-872d2459d2116fe9b392f812b5e646f7)
图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=1739174073-Htnt4PkaEtQN1ensq7xCUnHiGN5w9w4c-0-5f3fd0263c351868cc9af3aa3fa31b0e)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P39_137136.jpg?sign=1739174073-ZNHGZJPwl6rLYBRl5bQFj5HQ4VrFibTE-0-4757ff606584d80ce1706fe54f1472c6)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P40_137172.jpg?sign=1739174073-SnEW76eslhsA7DotoN47kFpXSBGW2dNG-0-88085129f362a975525a2642eda5ac51)
运行结果如图1-27所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P40_137147.jpg?sign=1739174073-64hjkelM971Xx9ywYuwTi1VhKLBlp1dB-0-40a547e8fcab5c13d949886c9b53c296)
图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=1739174073-TMtx9xvpyik4rfr3bVjColQUwGfXCwlx-0-0406224455d9ef1e7865ca9542a52889)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P42_137175.jpg?sign=1739174073-RcfAmsVpq9bktAAJ5B5U1srqTakN3vn5-0-a5a9ba75889f53b8a3cd579d6c93a9da)
运行结果如图1-28所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P42_93620.jpg?sign=1739174073-LmiTFFFoEv924ZtRvkxc6eeY55JxQZxQ-0-f03c89ac1ab05b94efbb83cc1e05e863)
图1-28 代码demo9.py的运行结果