![编程改变生活:用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=1739366978-EKQSukzliP9J492ndan9HelHrY5NJOeh-0-b747529b7af29aaf79ba61009bf023e0)
续表
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T44_137335.jpg?sign=1739366978-jH7Ye0rJuQEQhndeYFNRhbjVV6VH3KG6-0-195c1044164d8b9ed13c58f531e367fa)
在PySide6中,QTreeWidget类的信号见表1-9。
表1-9 QTreeWidget类的信号
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-T44_133815.jpg?sign=1739366978-4hwabJXxyecDqSQwS6Y0Q2rPT7G5Z779-0-62d505e70531398c294d7c08f813cfb0)
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=1739366978-KSHp9pM8HOExKAWEppBN6G10a8dvMnlu-0-adecd331effe4cf3d55ed973b548bb21)
在表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=1739366978-jMJDyLJpApIlwy8squZZPdj7fosGfYeU-0-685ce10294a6bb1dc51007e1d9a8ccec)
运行结果如图1-29所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P48_94457.jpg?sign=1739366978-aZqXUNEZwg3MxxyNA1QrjpBwgY9xM2gm-0-5fc83d6c2487f2832c7b788b096beedd)
图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=1739366978-Iy6ZcNCYCqd56QSqJuM882sVs6eIgq6B-0-9f73a88c540536415f6c4cabea0ce593)
图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=1739366978-tVtpraJUeyHB6sYMz7axJRTTEcAZxYBC-0-00265a7a73676be183fadca2b4dba5ba)
图1-31 拖曳Tree Widget控件
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P49_94475.jpg?sign=1739366978-x0MlqZfN1KuvK8QERAhsNp9gB1EtIMty-0-fb6648e06fa543ea66f509f80403f0db)
图1-32 右击后弹出的菜单
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P49_94478.jpg?sign=1739366978-vLNCekHmYG02bOxVPYhWIRb6vKBT0BeH-0-1b946830f2736ca1c33b329b79d865ee)
图1-33 “编辑树窗口部件”对话框
(4)在“编辑树窗口部件”对话框的“列”选项卡中,单击左下角的加号图标可以为树结构控件添加列,单击左下角的减号图标可以删除当前列。添加两列,如图1-34所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P50_94484.jpg?sign=1739366978-MSl09SXiTkveDr1TuscHdYbqrgL3x3ED-0-1820460b537f014cc30dfa9d6f137b8e)
图1-34 为树结构控件添加列
(5)在“编辑树窗口部件”对话框的“项目”选项卡中,单击左下角的加号图标可以为树结构控件添加项,单击左下角的减号图标可以删除当前行,中间的图标表示添加当前项的子项。依次添加项,如图1-35所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P50_94488.jpg?sign=1739366978-Il1n82ynM47GiUgD9DA3mqIwFMXa5fwu-0-8cae3025654094146358ba6ef5d80201)
图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=1739366978-mjyc9d3d6cBT3EAXgxHOwYqpVIDvyzqo-0-126486ed2b7ecafb2e9adda1775d16b3)
图1-36 已经添加项的树结构控件
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P51_94497.jpg?sign=1739366978-LPovsMSDvJhp0GXXz5doZ90jzjuRJZSR-0-d70e4a84283a19c1b4626e7efc550381)
图1-37 设置布局后的主窗口
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P51_94500.jpg?sign=1739366978-S5rvwg7zs1n0unQLpIDQhaTkw118ZbKm-0-53e193284d7fc1686cdb380acc84d6e9)
图1-38 将demo11.ui文件转换为demo11.py
(9)编写业务逻辑代码,代码如下:
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P51_137481.jpg?sign=1739366978-6tmEH5RU7nssmumMp64sbXHDICxtpknE-0-a07eadf2c1d39e9c9c1ddb540fc45f4a)
运行结果如图1-39所示。
![](https://epubservercos.yuewen.com/59022E/31397649907873106/epubprivate/OEBPS/Images/Figure-P52_94521.jpg?sign=1739366978-9VOCFIMnD1NF8dxYwJ7e9aQ8cjqmOxI6-0-86d488b628c96203739f0f5264db8ef2)
图1-39 代码demo11_main.py的运行结果