![编程改变生活:用PySide6/PyQt6创建GUI程序(进阶篇·微课视频版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/921/52841921/b_52841921.jpg)
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类的常用方法
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T43_137334.jpg?sign=1738864665-pveK8nj0nbXVaaXheBCccvQxWEvtc4QS-0-8732dd72b197bdd7e58d51d79381363c)
续表
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T44_137335.jpg?sign=1738864665-Ry9zVvaSZ1RDTruhp84ndeEONWUaD58l-0-7a5ed455afb85b9685617400bf897c6c)
在PySide6中,QTreeWidget类的信号见表1-9。
表1-9 QTreeWidget类的信号
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T44_133815.jpg?sign=1738864665-qiIsNHNw75sR37HpgyHbBEGYffnAIQFM-0-684fa7caa11a69d53adc38f1ea1bb2af)
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类的常用方法
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T45_137476.jpg?sign=1738864665-BDAg3cYhuzpEG0evoeRTHp6iMx313Uz0-0-faf90822d493e76bd8d2ea034b7a894c)
在表1-10中,QTreeWidgetItem.ChildIndictorPolicy的枚举值为QTreeWidgetItem.ShowIndicator(无论是否有子项都显示标识)、QTreeWidgetItem.DontShowIndicator(使有子项,也不显示标识)、QTreeWidgetItem.DontShowIndicatorWhenChildless(当没有子项时,不显示标识)。
【实例1-10】 创建一个窗口,该窗口包含一个树结构控件、一个标签控件。向树结构控件中添加两列数据,如果选中包含两列数据的项,则标签显示对应的信息,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P47_137478.jpg?sign=1738864665-6lWG873ybinDMzaAiLBx1C74oOa2uX1N-0-48118963ad900809b378d792ae68d18c)
运行结果如图1-29所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P48_94457.jpg?sign=1738864665-wdBof9onrAaRMTT93VHXEzSOPrH3xYWa-0-70eda903d098ace7f1049e95b08e0b03)
图1-29 代码demo10.py的运行结果
1.3.3 使用Qt Designer创建树结构控件
在PySide6中,可以使用Qt Designer在窗口中创建树结构控件。
【实例1-11】 使用Qt Designer设计一个包含树结构控件的窗口,向树结构控件中添加两列数据。操作步骤如下:
(1)打开Qt Designer软件,创建一个Widget类型的窗口,如图1-30所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P48_94462.jpg?sign=1738864665-ervDTTpdL36tn2i8GyrXcZ3lDLwNgXKO-0-a6c385e7b6519be7074516ad7642e825)
图1-30 创建的窗口
(2)将工具箱中的Tree Widget控件拖曳到主窗口,如图1-31所示。
(3)选中主窗口上的Tree Widget控件,右击,在弹出的菜单栏中选择“编辑项目”,此时会弹出一个“编辑树窗口部件”对话框,如图1-32和图1-33所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P49_94472.jpg?sign=1738864665-DQakheOdAm1qfNoEXaLwpVhBrtVHx0dw-0-fd269632cb1a93e6ad86dbf32784e2a3)
图1-31 拖曳Tree Widget控件
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P49_94475.jpg?sign=1738864665-fJRDEcLsqiNjNfSZbtO8u0gcE225hEdl-0-1ebd739747322ee585e288f5a37af502)
图1-32 右击后弹出的菜单
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P49_94478.jpg?sign=1738864665-hdunmV8RZxVFdlnh4QtYuWxP6KwRLKUf-0-b8f759a8fb9c9b308903d03566e7d4ee)
图1-33 “编辑树窗口部件”对话框
(4)在“编辑树窗口部件”对话框的“列”选项卡中,单击左下角的加号图标可以为树结构控件添加列,单击左下角的减号图标可以删除当前列。添加两列,如图1-34所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P50_94484.jpg?sign=1738864665-rv1AT85UxwszWvXpSID7Bs1Tv1mcdeFQ-0-9e58f40e975eb9f718d44429e218a600)
图1-34 为树结构控件添加列
(5)在“编辑树窗口部件”对话框的“项目”选项卡中,单击左下角的加号图标可以为树结构控件添加项,单击左下角的减号图标可以删除当前行,中间的图标表示添加当前项的子项。依次添加项,如图1-35所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P50_94488.jpg?sign=1738864665-ecJS4yHUraQzfc83uHFcEgOSS7UXkwx2-0-8129d7711a5e11a85472eb9d86d80018)
图1-35 为树结构控件添加项
(6)在“编辑树窗口部件”对话框中,单击“确定”按钮,可查看已经添加项的树结构控件,如图1-36所示。
(7)修改主窗口的标题,将主窗口的布局设置为水平布局,如图1-37所示。
(8)将设计的窗口文件命名为demo11.ui,并保存在D盘的Chapter1文件夹下,然后在Windows命令行窗口将demo11.ui文件转换为demo11.py,操作过程如图1-38所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P51_94494.jpg?sign=1738864665-kAsEa5MnQvQzrbZ4lTfELEwSiMIUoU7e-0-5257b05c3511ed1b8f92ccdd6b574bf0)
图1-36 已经添加项的树结构控件
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P51_94497.jpg?sign=1738864665-byzi9uJaW4WYLJeOFlPUytecLFXDvOgL-0-feebae3249b1417422d7531519710759)
图1-37 设置布局后的主窗口
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P51_94500.jpg?sign=1738864665-tu0MvXzvHcvLSIGg7VPCsnC0zXsqrnwC-0-fb35ff94dc6540ab221e632fbe70d8dd)
图1-38 将demo11.ui文件转换为demo11.py
(9)编写业务逻辑代码,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P51_137481.jpg?sign=1738864665-g9fwx72QHFEoSES8hFn2WLcbEEiO7gpQ-0-5b012ca0a30ed344578ede1a84b43f1e)
运行结果如图1-39所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P52_94521.jpg?sign=1738864665-7XqsmJjCdbXnDM7TWO0YAqPmtHAVCcpb-0-03ddc9f036bbf4709bfdc69c59599e22)
图1-39 代码demo11_main.py的运行结果