
1.3 树结构控件QTreeWidget及其项QTreeWidgetItem
在PySide6中,使用QTreeWidget类表示树结构控件,树结构控件由一列或多列组成。树结构控件有一个或多个顶层项,顶层项下面有任意多个子项,子项下面可以继续有子项,顶层项没有父项。与列表控件和表格控件不同,树结构的各个项之间有层级关系,可以折叠和展开。
使用QTreeWidgetItem类表示树结构控件的项,使用QTreeWidgetItem类可以定义项中的文字和图标。
1.3.1 树结构控件QTreeWidget
在PySide6中,使用QTreeWidget类创建树结构控件。QTreeWidget类是QTreeView类的子类,其继承关系图如图1-1所示。QTreeWidget类的构造函数如下:
QTreeWidget(parent:QWidget=None)
其中,parent表示父窗口或父控件
QTreeWidget类的常用方法见表1-8。
表1-8 QTreeWidget类的常用方法

续表

在PySide6中,QTreeWidget类的信号见表1-9。
表1-9 QTreeWidget类的信号

1.3.2 QTreeWidgetItem类
在PySide6中,使用QTreeWidgetItem类创建树结构的项,QTreeWidgetItem类的构造函数如下:
QTreeWidgetItem(type=QTreeWidgetItem.Type) QTreeWidgetItem(QTreeWidget,type=QTreeWidgetItem.Type) QTreeWidgetItem(Sequence[str],type=QTreeWidgetItem.Type) QTreeWidgetItem(QTreeWidget,Sequence[str],type=QTreeWidgetItem.Type) QTreeWidgetItem(QTreeWidgetItem,type=QTreeWidgetItem.Type) QTreeWidgetItem(QTreeWidget,QTreeWidgetItem,type=QTreeWidgetItem.Type) QTreeWidgetItem(QTreeWidgetItem,Sequence[str],type=QTreeWidgetItem.Type) QTreeWidgetItem(QTreeWidgetItem,QTreeWidgetItem,type=QTreeWidgetItem.Type)
其中,type的取值为QTreeWidgetItem.Type(默认值,值为1)或QTreeWidgetItem.UserType(值为1000),QTreeWidgetItem.UserType也是用户自定义类型的最小值;Sequence[str]表示字符串序列,即各列上的文字;当第1个参数为QTreeWidget时表示项添加到树结构控件中;当第1个参数为QTreeWidgetItem时表示父项,新创建的项作为子项添加到父项下;当第2个参数为QTreeWidgetItem时表示将新创建的项插入该项的下面。
QTreeWidgetItem类的常用方法见表1-10。
表1-10 QTreeWidgetItem类的常用方法

在表1-10中,QTreeWidgetItem.ChildIndictorPolicy的枚举值为QTreeWidgetItem.ShowIndicator(无论是否有子项都显示标识)、QTreeWidgetItem.DontShowIndicator(使有子项,也不显示标识)、QTreeWidgetItem.DontShowIndicatorWhenChildless(当没有子项时,不显示标识)。
【实例1-10】 创建一个窗口,该窗口包含一个树结构控件、一个标签控件。向树结构控件中添加两列数据,如果选中包含两列数据的项,则标签显示对应的信息,代码如下:

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

图1-29 代码demo10.py的运行结果
1.3.3 使用Qt Designer创建树结构控件
在PySide6中,可以使用Qt Designer在窗口中创建树结构控件。
【实例1-11】 使用Qt Designer设计一个包含树结构控件的窗口,向树结构控件中添加两列数据。操作步骤如下:
(1)打开Qt Designer软件,创建一个Widget类型的窗口,如图1-30所示。

图1-30 创建的窗口
(2)将工具箱中的Tree Widget控件拖曳到主窗口,如图1-31所示。
(3)选中主窗口上的Tree Widget控件,右击,在弹出的菜单栏中选择“编辑项目”,此时会弹出一个“编辑树窗口部件”对话框,如图1-32和图1-33所示。

图1-31 拖曳Tree Widget控件

图1-32 右击后弹出的菜单

图1-33 “编辑树窗口部件”对话框
(4)在“编辑树窗口部件”对话框的“列”选项卡中,单击左下角的加号图标可以为树结构控件添加列,单击左下角的减号图标可以删除当前列。添加两列,如图1-34所示。

图1-34 为树结构控件添加列
(5)在“编辑树窗口部件”对话框的“项目”选项卡中,单击左下角的加号图标可以为树结构控件添加项,单击左下角的减号图标可以删除当前行,中间的图标表示添加当前项的子项。依次添加项,如图1-35所示。

图1-35 为树结构控件添加项
(6)在“编辑树窗口部件”对话框中,单击“确定”按钮,可查看已经添加项的树结构控件,如图1-36所示。
(7)修改主窗口的标题,将主窗口的布局设置为水平布局,如图1-37所示。
(8)将设计的窗口文件命名为demo11.ui,并保存在D盘的Chapter1文件夹下,然后在Windows命令行窗口将demo11.ui文件转换为demo11.py,操作过程如图1-38所示。

图1-36 已经添加项的树结构控件

图1-37 设置布局后的主窗口

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

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

图1-39 代码demo11_main.py的运行结果