![编程改变生活:用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=1739267961-P7WALY9XoTokDIzrUfLFgPs9i5yfFqqr-0-2076189bc5012ba734c51fa146ae5bea)
续表
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T17_134473.jpg?sign=1739267961-KhSVMTGcEeBOTHd7aLvur9vDrUh1Ovff-0-abfcb340d107a79ef24004af50ca9bb8)
在表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=1739267961-XwnbSvArVhdFpz8KyLCTUvKLKKbuJuqn-0-44ea9c24f3791e6a8bb39d05565e22c7)
运行结果如图1-2所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P18_92117.jpg?sign=1739267961-exlLHvmiHYTQRVPlXk3cVz1IaM670Xsz-0-70259e1f71dc60339cea0776dd9e61f1)
图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=1739267961-RTTFrbHVCNsu4rg6P8l0HAIRZMaQjLqx-0-50ae7f72ba383aba756d4f446ae9dd03)
图1-3 创建的窗口
(2)将工具箱中的List Widget控件拖曳到主窗口,如图1-4所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P19_92127.jpg?sign=1739267961-NwvITGybLFwEbRLu0V8MlTmgtwlw175w-0-5007af56f7cc3d7dda72f79e2bb1cd2d)
图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=1739267961-OHveIijTb0l6oXZVgijZ0uVd3MtgOTFl-0-8d0f67ba5513e8a480d4b7e7cfa33385)
图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=1739267961-64roWiXAoO8lxUJW3SNRoGrsaY0u9OMH-0-9bb964ddf185358c308c8fcc95c773a2)
图1-6 “编辑列表窗口部件”对话框
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P20_92140.jpg?sign=1739267961-70ft9YRHCBrBwewBkqjrC4fondPsBkFB-0-2a82504983f7d326c7c8f697504412b7)
图1-7 为列表控件添加项
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P20_92143.jpg?sign=1739267961-BAtmZgsTj6On8YCIgDgv0skAosSwuu3a-0-fae9d14204b6fc7abb1d38bee22b2303)
图1-8 添加项的列表控件
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P20_92146.jpg?sign=1739267961-akEhR9b5zhZ8Uujwm9NGFW9qvg0gaS5X-0-b20d24f0fefac1c29992a97a6864ca88)
图1-9 修改属性后的主窗口
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P21_92151.jpg?sign=1739267961-npMb8cwkpjTL6uuAc9w1FuIUksmyk3Xm-0-b4abdac2f2299a22f45341ca00dd136b)
图1-10 将demo2.ui文件转换为demo2.py
(7)编写业务逻辑代码,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P21_136727.jpg?sign=1739267961-N93N7kTCjdofcFZR7OzonRCM1xYhKAhC-0-a8873398649ae5714ad19fcb9b34a5cb)
运行结果如图1-11所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P21_92163.jpg?sign=1739267961-vPu9YsYbVXibSEKTR4iCNkNo6ttsZruw-0-a8b38c3d228ebe90299088dbd57889da)
图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=1739267961-qRhThZ4Wi1dZiPzmEutFHzlZbzvaeSPY-0-811d10315b1f400bded72bd99cc0dc57)
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=1739267961-j17SzsPzZWx107F1DWNwfCgggrcC3hi3-0-9a36b2d9ac5a42958fc4a1c49e114d38)
在PySide6中,Qt.ItemFlags的枚举值见表1-4。
表1-4 Qt.ItemFlags的枚举值
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T23_136908.jpg?sign=1739267961-7NPEKV6Jq6nGeq5mzm1VQ4WifOxXyy2f-0-dd6cd480203091cfc968901c3e73b23b)
【实例1-3】 创建一个窗口,该窗口包含一个列表控件、4个按钮控件。这4个按钮分别实现添加项、编辑项、删除项、排序的作用,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P23_136909.jpg?sign=1739267961-Fo5eLjuSHIpK0xB2bguOOEStXFXryxEa-0-3da9bd67fd55f22ce9f174a83cb696b5)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P24_136910.jpg?sign=1739267961-G7pPDRrh3d33RPEQPuNGVwGxZrTdXTcm-0-4dfd40836fd93a002a094cc7be4c93e9)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P25_136911.jpg?sign=1739267961-AeWcBHHrdIydAbmYhBqffKtN6c9WtAhQ-0-461e3f42d99327ad7078fc5b2fd2da77)
运行结果如图1-12所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P25_92644.jpg?sign=1739267961-U8UISMVLUpL1EdzK1BLrGj0AeRI1oROc-0-109a1fa548c6a2082f16363abfc13386)
图1-12 代码demo3.py的运行结果
1.1.3 典型应用
【实例1-4】 创建一个窗口,该窗口包含一个列表控件。在列表控件中右击会弹出上下文菜单,菜单命令包含添加、编辑、删除、全选、反选、全不选,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P25_136912.jpg?sign=1739267961-8jUeq2JzAii74OQ6W3xIMjR28WPbicig-0-bb01e9330980ae1b609ce8438b621fda)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P26_136913.jpg?sign=1739267961-LT4FnK4pfF15HTcIjZOgy2ArGiuZZ6op-0-ed4e01ff2a16744769091a3f14dcb5fb)
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P27_136914.jpg?sign=1739267961-3xnCzb6ooda6hwY8DfybxqT50yEOhzMc-0-02093ad3f5a27eafa35331112eead0d3)
运行结果如图1-13所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P27_92675.jpg?sign=1739267961-iTHFzH6v87ed51QSbLvDnnMTIxnL05Xp-0-1f5090c95febc214e881d206ab87a026)
图1-13 代码demo4.py的运行结果