QTreeWidget 详解
QTreeWidget 是 PyQt5 框架中的一个重要部件,它提供了树形结构的视图,可以用于显示层级数据。以下是 QTreeWidget 的详细讲解,包括基本用法、主要方法和属性以及如何与其他组件进行交互。
基本用法
-
导入模块 要使用 QTreeWidget,首先需要导入相关模块:
from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QApplication import sys
-
创建 QTreeWidget 实例 创建 QTreeWidget 的实例并设置其列数和列标题:
app = QApplication(sys.argv) tree = QTreeWidget() tree.setColumnCount(2) tree.setHeaderLabels(["Column 1", "Column 2"])
-
添加顶层项和子项 添加顶层项(根项)和子项:
root = QTreeWidgetItem(tree) root.setText(0, "Root Item 1") root.setText(1, "Root Item 1 Description") child1 = QTreeWidgetItem(root) child1.setText(0, "Child 1") child1.setText(1, "Child 1 Description") child2 = QTreeWidgetItem(root) child2.setText(0, "Child 2") child2.setText(1, "Child 2 Description")
-
显示窗口 设置窗口大小并显示:
tree.setWindowTitle("QTreeWidget Example") tree.resize(400, 300) tree.show() sys.exit(app.exec_())
主要方法和属性
- 添加和删除项
- addTopLevelItem(item): 添加顶层项。
- addTopLevelItems(items): 添加多个顶层项。
- takeTopLevelItem(index): 删除并返回指定索引的顶层项。
- clear(): 清空所有项。
- 项操作
- setText(column, text): 设置指定列的文本。
- text(column): 获取指定列的文本。
- addChild(child): 为当前项添加子项。
- takeChild(index): 删除并返回指定索引的子项。
- child(index): 返回指定索引的子项。
- childCount(): 返回子项数目。
- 信号和槽
- itemClicked(item, column): 单击项时发射信号。
- itemDoubleClicked(item, column): 双击项时发射信号。
- itemChanged(item, column): 项目改变时发射信号。
代码示例
以下是一个完整的示例,展示了如何使用 QTreeWidget 以及如何响应用户的交互:
from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QApplication, QVBoxLayout, QWidget, QLabel import sys class TreeWidgetDemo(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('QTreeWidget Demo') self.setGeometry(100, 100, 600, 400) self.tree = QTreeWidget(self) self.tree.setColumnCount(2) self.tree.setHeaderLabels(['Name', 'Description']) root1 = QTreeWidgetItem(self.tree) root1.setText(0, 'Root 1') root1.setText(1, 'Root 1 Description') child1 = QTreeWidgetItem(root1) child1.setText(0, 'Child 1') child1.setText(1, 'Child 1 Description') child2 = QTreeWidgetItem(root1) child2.setText(0, 'Child 2') child2.setText(1, 'Child 2 Description') root2 = QTreeWidgetItem(self.tree) root2.setText(0, 'Root 2') root2.setText(1, 'Root 2 Description') layout = QVBoxLayout(self) layout.addWidget(self.tree) self.label = QLabel("Selected Item Info", self) layout.addWidget(self.label) self.tree.itemClicked.connect(self.onItemClicked) self.setLayout(layout) def onItemClicked(self, item, column): self.label.setText(f"Selected: {item.text(0)} - {item.text(1)}") if __name__ == '__main__': app = QApplication(sys.argv) demo = TreeWidgetDemo() demo.show() sys.exit(app.exec_())
示例界面如图所示:
这个示例展示了一个包含两个顶层项和多个子项的树形视图,并且当用户点击某个项时,在窗口底部的标签中显示该项的信息。
通过上述步骤和示例,应该能够掌握 QTreeWidget 的基本用法,并在 PyQt5 应用程序中实现树形结构视图。
还没有评论,来说两句吧...