PyQt6/PySide6 的 QTreeView 类

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值