QTreeView
是 PyQt6 或 PySide6 库中用于显示分层数据的控件。它适用于展示树形结构的数据,如文件系统、组织结构等。QTreeView
也是基于模型-视图架构的,通常与 QAbstractItemModel
的子类(如 QStandardItemModel
或自定义模型)一起使用。下面我将详细介绍 QTreeView
的主要特性及其使用方法。
1. 基本概念
- 树形视图:用于显示分层数据的控件。
- 模型-视图架构:
QTreeView
使用模型-视图架构,其中QTreeView
是视图部分,负责显示数据;而模型(如QStandardItemModel
)则负责管理数据。 - 节点:树形结构中的基本单位,每个节点可以有子节点。
- 根节点:树形结构的最顶层节点。
- 展开/折叠:控制节点的显示状态,展开时显示其子节点,折叠时隐藏其子节点。
- 选择模式:控制用户如何选择节点。
- 编辑模式:允许用户直接在树形视图中编辑数据。
2. 创建 QTreeView 实例
要使用 QTreeView
,首先需要导入相应的库:
from PyQt6.QtWidgets import QApplication, QTreeView, QVBoxLayout, QWidget, QPushButton
from PyQt6.QtGui import QStandardItemModel, QStandardItem
# 或者
from PySide6.QtWidgets import QApplication, QTreeView, QVBoxLayout, QWidget, QPushButton
from PySide6.QtGui import QStandardItemModel, QStandardItem
接着创建一个窗口,并在其中添加 QTreeView
控件:
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("我的应用程序")
self.setGeometry(100, 100, 800, 600)
# 初始化UI
self.initUI()
def initUI(self):
layout = QVBoxLayout()
# 创建树形视图
self.tree_view = QTreeView(self)
# 创建模型
self.model = QStandardItemModel()
self.model.setHorizontalHeaderLabels(['名称', '类型'])
# 添加数据
root_item = self.model.invisibleRootItem()
item1 = QStandardItem('项目1')
item1.appendRow([QStandardItem('子项目1.1'), QStandardItem('类型A')])
item1.appendRow([QStandardItem('子项目1.2'), QStandardItem('类型B')])
root_item.appendRow(item1)
item2 = QStandardItem('项目2')
item2.appendRow([QStandardItem('子项目2.1'), QStandardItem('类型C')])
item2.appendRow([QStandardItem('子项目2.2'), QStandardItem('类型D')])
root_item.appendRow(item2)
# 设置模型到视图
self.tree_view.setModel(self.model)
# 添加按钮
button = QPushButton("打印选中项", self)
button.clicked.connect(self.print_selection)
# 添加到布局
layout.addWidget(self.tree_view)
layout.addWidget(button)
self.setLayout(layout)
def print_selection(self):
selected_indices = self.tree_view.selectedIndexes()
for index in selected_indices:
row = index.row()
column = index.co