首页 > 其他分享 >24.PyQt5【高级组件】树形组件-QTreeWidget

24.PyQt5【高级组件】树形组件-QTreeWidget

时间:2023-01-16 10:55:12浏览次数:47  
标签:24 返回 column self PyQt5 item QTreeWidget 组件 节点

一、前言

QTreeWidget 使用类似于 QListView 类的方式提供一种典型的基于 item 的树形交互方法类,该类基于QT的“模型/视图”结构,提供了默认的模型来支撑 item 的显示,这些 item 类为 QTreeWidgetItem 类。

二、学习目标

1.QTreeWidget常用方法

2.QTreeWidget常用信号

3.QTreeWidget组件的应用

三、知识点

1.【QTreeWidget常用方法】

  • QTreeWidget类中的常用方法

    方法 描述
    addTopLevelItem(item) QTreeWidget组件增加单个根节点item
    addTopLevelItems(items) QTreeWidget组件增加多个根节点item
    setHeaderLabels(labels) 设置标题列并为每个列设置标签
    setColumnWidth(column, num) 设置列宽
    setItemWidget(item,column,widget) 为指定列的item设置小部件
    removeItemWidget(item,column) 为指定列的item删除小部件
    insertTopLevelItem(index,item) 在索引位置插入单个根节点
    insertTopLevelItems(index,items) 在索引位置插入多个根节点
    takeTopLevelItem(index) 删除指定索引位置的根节点
    findItems(text,flags[,column=0]) 使用给定的标志查找文本与字符串文本匹配的项目
    currentItem() 返回当前item对象
    columnCount() 返回所有列数
    currentColumn() 返回当前项的列索引
    headerItem() 返回标题项item对象
    indexOfTopLevelItem(item) 返回给定根节点item的索引值
    topLevelItem(index) 返回给定索引处的根节点item,如果该项目不存在,则返回None。
    topLevelItemCount() 返回根节点item的数量。默认情况下,此属性的值为0。
    selectedItems() 返回所有选定非隐藏项目的列表
    isItemExpanded(item) 判断指定item根节点是否展开,返回bool
    isItemHidden(item) 判断指定item根节点是否隐藏,返回bool
    isItemSelected(item) 判断指定item根节点是否选择,返回bool
    clear() 清除其所有item
  • QTreeWidgetItem类中常用的方法

    方法 描述
    addChild(child) QTreeWidgetItem组件增加单个子节点item
    addChildren(children) QTreeWidgetItem组件增加多个子节点item
    setText(column,text) 设置文本名称为指定列的子节点item
    setCheckState(column,state) 设置复选状态为指定列的子节点item
    Qt.Checked:选中状态
    Qt.PartiallyChecked:半选中状态
    Qt.Unchecked:没有被选中
    setIcon(column,icon) 设置图标为指定列的子节点item
    setExpanded(expand) 设置子节点item为是否展开
    setHidden(hide) 设置子节点item为是否隐藏
    setSelected(select) 设置要选择的项目的选择状态
    setFlags(flags) 设置列表项的项目标志设置为flags
    setTextAlignment(column,alignment) 节点文本对齐方式
    Qt.AlignLeft:将单元格内的内容沿单元格的左边缘对齐
    Qt.AlignRight:将单元格内的内容沿单元格的右边缘对齐
    Qt.AlignHCenter:在可用空间中,居中显示在水平方向上
    Qt.AlignJustify:将文本在可用空间内对齐,默认从左到右
    Qt.AlignTop:与顶部对齐
    Qt.AlignBottom:与底部对齐
    Qt.AlignVCenter:在可用空间中,居中显示在垂直方向上
    Qt.AlignBaseline:与基线对齐
    insertChild(index,child) 在索引位置插入单个子节点
    insertChildren(index,children) 在索引位置插入多个子节点
    takeChild(index) 删除索引处的子节点并返回它,否则返回0
    takeChildren() 删除子级列表并返回它,否则返回一个空列表
    removeChild(child) 删除指定的子节点item
    parent() 返回项目的父项
    treeWidget() 返回包含该项目的QTreeWidget
    text(column) 返回指定列的文本值
    indexOfChild(child) 返回给定子节点item的索引值
    child(index) 返回指定索引的子节点item
    childCount() 返回子节点的数量
    columnCount() 返回子节点的列数
    isDisabled() 判断该项是否被禁用,禁用则返回True;否则返回False。
    isExpanded() 判断该项是否被展开,展开则返回True,否则返回False。
    isHidden() 判断该项是否被隐藏,隐藏则返回True,否则返回False。
    isSelected() 判断该项是否被选择,选择则返回True,否则返回False。

2.【QTreeWidget常用信号】

信号 描述
itemClicked(item,column) 当用户单击item节点时,发出信号
itemDoubleClicked(item,column) 当用户双击item节点时,发出信号
itemChanged(item,column) 当指定节点中列的内容发生更改时,发出信号
currentItemChanged(current,previous) 当前节点更改时,发出信号
itemCollapsed(item) 折叠指定节点时,发出信号
itemExpanded(item) 展开指定节点时,发出信号
itemEntered(item,column) 当鼠标光标进入指定列上的项目时,发出信号
itemPressed(item,column) 用户在窗口内按下鼠标按钮时,发出信号
itemSelectionChanged() 当树构件中的选择发生变化时,发出信号

3.【QTreeWidget组件的应用】

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QTreeWidget, QTreeWidgetItem


class QmyWidget(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)  # 调用父类的构造函数,创建QWidget窗体
        self.setupUi()

    def setupUi(self):
        """页面初始化"""
        # 设置窗体大小及标题
        self.resize(500, 400)
        self.setWindowTitle("QTreeWidget组件示例")
        # 创建布局
        self.layout = QVBoxLayout()

        # QTreeWidget组件定义
        self.treeWidget = QTreeWidget()
        # QTreeWidget组件设置
        self.treeWidget.headerItem().setText(0, "参数名")     # 给第1列设置标题
        self.treeWidget.headerItem().setText(1, "参数值")     # 给第2列设置标题
        self.treeWidget.setColumnWidth(0, 200)               # 给第1列设置列宽200
        self.rootItem = QTreeWidgetItem()
        self.rootItem.setText(0, "根节点")                    # 给根节点增加文本
        self.treeWidget.addTopLevelItem(self.rootItem)       # 增加根节点
        self.childItem1 = QTreeWidgetItem()
        self.childItem1.setText(0, "子节点1-key")             # 设置子节点名称
        self.childItem1.setText(1, "子节点1-value")           # 设置子节点名称
        self.childItem1.setCheckState(0, Qt.Unchecked)       # 设置复选框未选择
        self.childItem1.setIcon(0, QIcon('logo.png'))        # 设置图标
        self.rootItem.addChild(self.childItem1)
        self.childItem2 = QTreeWidgetItem()
        self.childItem2.setText(0, "子节点2-key")
        self.childItem2.setText(1, "子节点2-value")
        self.rootItem.addChild(self.childItem2)
        # QTreeWidget绑定信号
        self.treeWidget.itemClicked.connect(self.on_treeWidget_itemClicked)

        # 创建两个按钮组件
        self.button1 = QPushButton("新增根节点", self)
        self.button1.clicked.connect(self.insert_root_item)  # 为button绑定槽函数
        self.button2 = QPushButton("新增子节点", self)
        self.button2.clicked.connect(self.insert_child_item)   # 为button绑定槽函数
        self.button3 = QPushButton("删除根节点", self)
        self.button3.clicked.connect(self.delete_root_item)    # 为button绑定槽函数
        self.button4 = QPushButton("删除子节点", self)
        self.button4.clicked.connect(self.delete_child_item)    # 为button绑定槽函数
        self.button5 = QPushButton("查询节点", self)
        self.button5.clicked.connect(self.select_item)    # 为button绑定槽函数

        # 将组件添加到布局中
        self.layout.addWidget(self.treeWidget)
        self.layout.addWidget(self.button1)
        self.layout.addWidget(self.button2)
        self.layout.addWidget(self.button3)
        self.layout.addWidget(self.button4)
        self.layout.addWidget(self.button5)
        # 为窗体添加布局
        self.setLayout(self.layout)

    def insert_root_item(self):
        """新增item槽函数"""
        print("item新增成功!")
        new_item = QTreeWidgetItem()
        new_item.setText(0, "新增根节点")
        self.treeWidget.insertTopLevelItem(1, new_item)

    def insert_child_item(self):
        """新增item槽函数"""
        print("item新增成功!")
        new_item = QTreeWidgetItem()
        new_item.setText(0, "新增子节点")
        self.rootItem.insertChild(2, new_item)

    def delete_root_item(self):
        """删除item槽函数"""
        print("item删除成功!")
        self.treeWidget.takeTopLevelItem(1)

    def delete_child_item(self):
        """删除item槽函数"""
        print("item删除成功!")
        self.rootItem.takeChild(2)

    def select_item(self):
        """查询item槽函数"""
        print("item查询成功!")
        # 先隐藏所有根节点
        for i in range(self.treeWidget.topLevelItemCount()):
            self.treeWidget.topLevelItem(i).setHidden(True)
        # 查询节点并取消隐藏
        item_list = self.treeWidget.findItems("新增根节点", Qt.MatchContains | Qt.MatchRecursive, 0)
        for item in item_list:
            item.setHidden(False)

    def on_treeWidget_itemClicked(self, item, column):
        """槽函数"""
        print("鼠标点击了第{}列的{}".format(str(column), item.text(column)))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    myMain = QmyWidget()
    myMain.show()
    sys.exit(app.exec_())

标签:24,返回,column,self,PyQt5,item,QTreeWidget,组件,节点
From: https://www.cnblogs.com/ckxingchen/p/17054887.html

相关文章

  • 26.PyQt5【高级组件】工具箱-QToolBox
    一、前言QToolBox控件提供了一个可进行一列选项卡操作方式,在每个选项卡内可包含不同的控件布局。QToolBox将选项卡一个一个地显示,当前项目显示在当前选项卡下方。每个选项......
  • 3.PyQt5【窗口组件】主窗口-QMainWindow
    一、前言QMainWindow类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围......
  • 4.PyQt5【布局组件】水平布局-QHBoxLayout
    一、前言QLayout是Qt中布局管理器的抽象基类,通过对QLayout的继承,实现了功能各异且互补的布局管理器。布局管理器不是界面组件,而是界面组件的定位策略;任意容器类型的组件都......
  • 5.PyQt5【布局组件】垂直布局-QVBoxLayout
    一、前言本节我们介绍布局组件中的垂直布局QVBoxLayout。二、学习目标1.QVBoxLayout垂直布局应用三、知识点1.【QVBoxLayout垂直布局应用】垂直布局将多个控件在垂直......
  • 6.PyQt5【布局组件】网格布局-QGridLayout
    一、前言本节我们介绍布局组件中的网格布局QGridLayout。二、学习目标1.QGridLayout网格布局的应用三、知识点1.【QGridLayout网格布局的应用】网格布局也称栅格布局......
  • 7.PyQt5【布局组件】表单布局-QFormLayout
    一、前言本节我们介绍布局组件中的表单布局QFormLayout。二、学习目标1.QFormLayout表单布局的应用三、知识点1.【QFormLayout表单布局的应用】表单布局以两列的形式......
  • 9.PyQt5【布局组件】区域分隔器-QSplitter
    一、前言本节我们介绍布局组件中的区域分隔器QSplitter。二、学习目标1.QSplitter区域分隔器的应用三、知识点1.【QSplitter区域分隔器的应用】QSplitter是一个带切......
  • 8.PyQt5【布局组件】容器布局-QGroupBox
    一、前言本节我们介绍布局组件中的容器布局QGroupBox。二、学习目标1.QGroupBox容器布局的应用三、知识点1.【QGroupBox容器布局的应用】容器布局将容器控件(Containe......
  • 10.PyQt5【基本组件】标签-QLabel
    一、前言QLabel对象充当占位符以显示不可编辑的文本或图像,或动画GIF电影。它也可以用作其他小部件的助记键。标签上可以显示纯文本、超链接或富文本。二、学习目标1.Q......
  • 11.PyQt5【基本组件】单行输入框-QLineEdit
    一、前言QLineEdit是最常用的输入字段。它提供了一个框,可以在其中输入一行文本。二、学习目标1.QLineEdit常用方法2.QLineEdit常用信号3.QLineEdit组件的应用三、知......