![编程改变生活:用PySide6/PyQt6创建GUI程序(进阶篇·微课视频版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/921/52841921/b_52841921.jpg)
1.1 列表控件QListWidget及其项QListWidgetItem
在PySide6中,使用QListWidget类表示列表控件,列表控件由一行多列构成,每行称为项。可以在列表控件中添加、删除列表中的项。项(Item)为列表控件的基本单位。使用QListWidgetItem类表示列表控件的项。
1.1.1 列表控件QListWidget
在PySide6中,使用QListWidget类创建列表控件。QListWiget类是QListView类的子类,位于PySide6的QWidgets子模块下。QListWidget类的构造函数如下:
QListWidget(parent:QWidget=None)
其中,parent表示父窗口或父控件。
QListWidget类的常用方法见表1-1。
表1-1 QListWidget类的常用方法
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T16_47519.jpg?sign=1739381011-BmA0uKafzAvZ2rumHRpCEFzWq5DQDyzR-0-229633586bc5fcc8864ea808e088ccae)
续表
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T17_134473.jpg?sign=1739381011-GIFykAkVHqOuUACxhZrCjPtnBi2IPCTl-0-03dbf4adf114c70450d4fd359e149341)
在表1-1中,Qt.MatchFlags的枚举值为Qt.MatchExactly、Qt.MatchFixedString、Qt.MatchContains、Qt.MatchStartsWith、Qt.MatchEndsWith、Qt.MatchCaseSensitive、Qt.MatchRegularExpression、Qt.MatchWildcard、Qt.MatchWrap、Qt.MatchRecursive。
Qt.DropAction的枚举值为Qt.CopyAction(复制)、Qt.MoveAction(移动)、Qt.LinkAction(链接)、Qt.IgnoreAction(什么都不做)、Qt.TargetMoveAction(目标对象接管)。
【实例1-1】 创建一个窗口,该窗口包含一个列表控件。要求在列表控件中显示项,设置背景色,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P17_134474.jpg?sign=1739381011-0VNfgOb8iTrmArQb4CHC5BfxJZtIYTRd-0-a03168a26bf4a61495e8c76980c73cd9)
运行结果如图1-2所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P18_92117.jpg?sign=1739381011-5xMxJwow4TE58D7fWYsaHIFYxcvMZcaB-0-7f05b5c1d077bba5d628539e8f71a800)
图1-2 代码demo1.py的运行结果
在PySide6中,可以使用Qt Designer在窗口中创建列表控件。
【实例1-2】 使用Qt Designer设计一个包含列表控件的窗口,向列表控件中添加比较流行的计算机编程语言。操作步骤如下:
(1)打开Qt Designer软件,创建一个Widget类型的窗口,如图1-3所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P18_92121.jpg?sign=1739381011-VGpCOW2vdDzpnpIo3Uv6AODYPqKVddNn-0-5a6ec4b20c572df8927d9bbb76e5c9a4)
图1-3 创建的窗口
(2)将工具箱中的List Widget控件拖曳到主窗口,如图1-4所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P19_92127.jpg?sign=1739381011-RbFSGtvueMgQp0hGjURzhm4UTJFnP399-0-ae4795b45ee7da55437945c030295083)
图1-4 拖曳List Widget控件
(3)选中主窗口上的List Widget控件,右击,在弹出的菜单栏中选择“编辑项目”,此时会弹出一个“编辑列表窗口部件”对话框,如图1-5和图1-6所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P19_92131.jpg?sign=1739381011-TCCcnB8IxnCsbzP5HsLctkwG5xMMNWG4-0-3acd84e504b611e1e2f16fc89d9d6283)
图1-5 右击后弹出的菜单
(4)在“编辑列表窗口部件”对话框中单击左下角的加号图标可以为列表控件添加项,单击左下角的减号图标可以删除当前项。添加完毕后,单击“确定”按钮,如图1-7和图1-8所示。
(5)将主窗口的布局设置为水平布局,将列表控件的字体设置为黑体,将字号设置为14,将列表控件的背景色设置为PaleGreen,如图1-9所示。
(6)将主窗口的标题修改为QListWidget,然后将设计的窗口文件命名为demo2.ui,并保存在D盘的Chapter1文件夹下,然后在Windows命令行窗口将demo2.ui文件转换为demo2.py,操作过程如图1-10所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P20_92137.jpg?sign=1739381011-rBRXMZ9aGWKPOqowKCFfxMW7E5eZLmjn-0-4b49014e05cbe0f72bdced9659129cd9)
图1-6 “编辑列表窗口部件”对话框
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P20_92140.jpg?sign=1739381011-Y8ufnB1tSQNyZlrarL6Odw4frSGQv8f2-0-9ce699ba6ddc0ca82800ac6f8b1a42f5)
图1-7 为列表控件添加项
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P20_92143.jpg?sign=1739381011-MQgXNVTVMRlAVZmO2CDQPs1u9SkX7V4u-0-e813fa1fdb5d315a4ec23f7e704fd031)
图1-8 添加项的列表控件
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P20_92146.jpg?sign=1739381011-gbSc943r3RIllYX2N5WjnqxW4Ya20EB2-0-f6ea1635c517564f63d89ba9b4200374)
图1-9 修改属性后的主窗口
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P21_92151.jpg?sign=1739381011-CN7BJ7tgeFbKXVIkjfGoXSGPnKiG3j0o-0-cbac4581bf0a5dea5d300fad8521885a)
图1-10 将demo2.ui文件转换为demo2.py
(7)编写业务逻辑代码,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P21_136727.jpg?sign=1739381011-4sdfr6qjW17wewg16TCMup1doICN84XC-0-64a910845f5bece7491286c9ef77e0c2)
运行结果如图1-11所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P21_92163.jpg?sign=1739381011-QZ90bYmvA5erwiTFd3XVSX4EEBo4UnzP-0-063df60dfa1da384713566fc6afec1aa)
图1-11 代码demo2_main.py的运行结果
在PySide6中,QListWidget类的信号见表1-2。
表1-2 QListWidget类的信号
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T22_136905.jpg?sign=1739381011-5BtwSMnZ5NdriEx44eFv5TI0Llzgnw0G-0-acda155b4250e171e754db94315cf621)
1.1.2 QListWidgetItem类
在PySide6中,使用QListWidgetItem类表示列表控件中的项。QListWidgetItem类位于PySide6的QtWidgets子模块下,其构造函数如下:
QListWidgetItem(listview:QListWidget=None,type:int=QListWidgetItem.Type) QListWidgetItem(text:str,listview:QListWidget=None,type:int=QListWidgetItem.Type) QListWidgetItem(icon:Union[QIcon,QPixmap],text:str,listview:QListWidget=None,type:int= QListWidgetItem.Type)
其中,listview表示列表控件;type的取值为QListWidgetItem.Type(默认值,值为1)或QListWidgetItem.UserType(值为1000),QListWidgetItem.UserType也是用户自定义类型的最小值;text表示项的文本;icon表示项的图标。
QListWidgetItem类的常用方法见表1-3。
表1-3 QListWidgetItem类的常用方法
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T22_136906.jpg?sign=1739381011-6xLMgikJrq63Y5TKLfWjgwCf0dTofUlh-0-f257b6bb804a3b394cd4365b4e241b84)
在PySide6中,Qt.ItemFlags的枚举值见表1-4。
表1-4 Qt.ItemFlags的枚举值
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T23_136908.jpg?sign=1739381011-SdbnTNYbN7JKROqnqtsHzxDrlbxXm20K-0-9823c7fd057a6dfc7ab68621fb228f88)
【实例1-3】 创建一个窗口,该窗口包含一个列表控件、4个按钮控件。这4个按钮分别实现添加项、编辑项、删除项、排序的作用,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P23_136909.jpg?sign=1739381011-e0GbLhuXUDdiNql0LW0RYBbSA2WohtCN-0-b3a26e0723de5e9d80166bbbbcd9cf7d)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P24_136910.jpg?sign=1739381011-9ons8C36ADT4MuJjxuXrEOqeuYzzukVe-0-12628dd306047ed071cb0dc61d296ea6)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P25_136911.jpg?sign=1739381011-pVk226dd9mFFufQ10XTRcmMszPIhPMAU-0-fe2efc97cfedbd78392cb50c16ae3380)
运行结果如图1-12所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P25_92644.jpg?sign=1739381011-geVH1cdlg34UzntYFsi7A8CQUjUVieNY-0-3bdced33d5f4a78ec357f9709fd9815f)
图1-12 代码demo3.py的运行结果
1.1.3 典型应用
【实例1-4】 创建一个窗口,该窗口包含一个列表控件。在列表控件中右击会弹出上下文菜单,菜单命令包含添加、编辑、删除、全选、反选、全不选,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P25_136912.jpg?sign=1739381011-HxjXgWEJG18hL4EIt2Qy8E1p4YyUVtyI-0-8c56fcbbb2cabf7030d7ec87c12ef90f)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P26_136913.jpg?sign=1739381011-TMaftquUOBb64tH78rdv0Jbg62dESssX-0-f2acfdbfa9b5e3377a246f0a29526d8c)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P27_136914.jpg?sign=1739381011-o7nhWudDfLzTow9jkW7Tti2cCJtLfrjA-0-f1b14939513b6964334003c6a5ecf27d)
运行结果如图1-13所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P27_92675.jpg?sign=1739381011-pzRmE4FNbwvYES5SXFRw6m5EbziaGPpE-0-7b35c96f0061818a7bca3348a70b29c6)
图1-13 代码demo4.py的运行结果