
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类的常用方法

续表

在表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】 创建一个窗口,该窗口包含一个列表控件。要求在列表控件中显示项,设置背景色,代码如下:

运行结果如图1-2所示。

图1-2 代码demo1.py的运行结果
在PySide6中,可以使用Qt Designer在窗口中创建列表控件。
【实例1-2】 使用Qt Designer设计一个包含列表控件的窗口,向列表控件中添加比较流行的计算机编程语言。操作步骤如下:
(1)打开Qt Designer软件,创建一个Widget类型的窗口,如图1-3所示。

图1-3 创建的窗口
(2)将工具箱中的List Widget控件拖曳到主窗口,如图1-4所示。

图1-4 拖曳List Widget控件
(3)选中主窗口上的List Widget控件,右击,在弹出的菜单栏中选择“编辑项目”,此时会弹出一个“编辑列表窗口部件”对话框,如图1-5和图1-6所示。

图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所示。

图1-6 “编辑列表窗口部件”对话框

图1-7 为列表控件添加项

图1-8 添加项的列表控件

图1-9 修改属性后的主窗口

图1-10 将demo2.ui文件转换为demo2.py
(7)编写业务逻辑代码,代码如下:

运行结果如图1-11所示。

图1-11 代码demo2_main.py的运行结果
在PySide6中,QListWidget类的信号见表1-2。
表1-2 QListWidget类的信号

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类的常用方法

在PySide6中,Qt.ItemFlags的枚举值见表1-4。
表1-4 Qt.ItemFlags的枚举值

【实例1-3】 创建一个窗口,该窗口包含一个列表控件、4个按钮控件。这4个按钮分别实现添加项、编辑项、删除项、排序的作用,代码如下:



运行结果如图1-12所示。

图1-12 代码demo3.py的运行结果
1.1.3 典型应用
【实例1-4】 创建一个窗口,该窗口包含一个列表控件。在列表控件中右击会弹出上下文菜单,菜单命令包含添加、编辑、删除、全选、反选、全不选,代码如下:



运行结果如图1-13所示。

图1-13 代码demo4.py的运行结果