MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

12.3 PyQt5表格介绍【树控件】-QTreeWidget

2025-01-12 15:23 huorong 精选文章 3 ℃ 0 评论

1.QTreeWidget简介

PyQt5中QTreeWidget是QTreeVIew的子类提供了简化的接口来创建带有静态列的树形结构,QTreeWidget提供了默认的模型,并且自动处理数据的展示。

2.QTreeWidget案例

import sys
from PyQt5.QtWidgets import QApplication, QTreeWidget, QMainWindow, QTreeWidgetItem
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon



class QTreeWidgetDemo(QMainWindow):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('QTreeWidget演示')
        self.resize(600, 400)
        # 创建树控件
        tree = QTreeWidget()
        # 设置树的列
        tree.setColumnCount(2)
        # 设置列标签名
        tree.setHeaderLabels(['key', 'value'])
        tree.setColumnWidth(0, 150)

        # 创建根节点
        root = QTreeWidgetItem()  # 创建节点
        root.setText(0, '根节点')  # 设置节点名称
        root.setIcon(0, QIcon('../MenuBar/img/open.png'))  # 设置节点图标
        tree.addTopLevelItem(root)

        child1 = QTreeWidgetItem(root)
        child1.setText(0, '子节点1')
        child1.setText(1, '子节点1数据')  # 设置第二列数据
        child1.setIcon(0, QIcon('../MenuBar/img/new.png'))
        child1.setCheckState(0, Qt.Unchecked)  # 设置节点复选框

        child2 = QTreeWidgetItem(root)
        child2.setText(0, '子节点2')
        child2.setText(1, '子节点2数据')  # 设置第二列数据
        child2.setIcon(0, QIcon('../MenuBar/img/new.png'))
        child2.setCheckState(0, Qt.Unchecked)  # 设置节点复选框

        child3 = QTreeWidgetItem(child2)
        child3.setText(0, '子节点2.1')
        child3.setText(1, '子节点2.1数据')  # 设置第二列数据
        child3.setIcon(0, QIcon('../MenuBar/img/new.png'))
        child3.setCheckState(0, Qt.Unchecked)  # 设置节点复选框

        tree.expandAll()  # 默认全部展开

        tree.itemClicked.connect(self.on_item_clicked)
        tree.itemActivated.connect(self.on_item_activated)
        tree.itemDoubleClicked.connect(self.on_item_double_clicked)

        self.setCentralWidget(tree)

    def on_item_clicked(self, item, column):
        print('clicked:', item, column)

    def on_item_activated(self, item, column):
        print('activated:', item, column)

    def on_item_double_clicked(self, item, column):
        print('double clicked:', item, column)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = QTreeWidgetDemo()
    w.show()
    app.exec()

3.运行结果

4.常用方法

方法

描述

addTopLevelItem(QTreeWidgetItem *item)

向 QTreeWidget 添加一个根节点

addTopLevelItems(items: Iterable[QTreeWidgetItem])

向 QTreeWidget 添加多个根节点

insertTopLevelItem(index: int, item: QTreeWidgetItem)

在指定位置插入一个根节点

insertTopLevelItems(index: int, items: List[QTreeWidgetItem])

在指定位置插入多个根节点

takeTopLevelItem(index: int)

移除并返回指定索引的根节点

setVisible(Bool)

设置QTreeWidget是否可见

isVisible()

获取QTreeWidget是否可见

invisibleRootItem()

返回不可见的根节点,用于管理顶层项目

clear()

清除所有项

currentItem()

返回当前选中的项

setCurrentItem(item: QTreeWidgetItem)

设置当前选中的项目

itemAt(self, p: QPoint) itemAt(self, ax: int, ay: int)

返回指定位置的项目

findItems(const QString &text, Qt:MatchFlags flags)

查找与给定字符串匹配的所有项: Qt.MatchExactly:完全匹配 Qt.MatchFixedString:与 MatchExactly 类似,但不区分大小写 Qt.MatchContains:文本包含指定的字符串 Qt.MatchStartsWith:文本以指定的字符串开头 Qt.MatchEndsWith:文本以指定的字符串结尾 Qt.MatchRecursive:递归搜索所有子项 Qt.MatchCaseSensitive:区分大小写的匹配 Qt.MatchWrap:如果没有找到匹配项,则从头开始搜索 Qt.MatchWildcard:支持通配符(如 * 和 ?)的匹配 Qt.MatchRegExp:使用正则表达式进行匹配

itemAbove(QTreeWidgetItem *item)

返回给定项目之上的项目

itemBelow(QTreeWidgetItem *item)

返回给定项目之下的项目

itemFromIndex(const QModelIndex &index)

从模型索引返回项

itemWidget(QTreeWidgetItem *item, int column)

返回指定项指定列中的小部件

removeItemWidget(QTreeWidgetItem *item, int column)

移除放置在给定项指定列的小部件

selectedItems()

返回所有选中的项

setColumnCount(int columns)

设置列数

setHeaderHidden(bool)

设置是否隐藏头部

isHeaderHidden()

返回是否隐藏头部

setHeaderLabels(labels: typing.Iterable[str])

设置头部标签

setHeaderLabel(alabel: str)

设置头部标签(仅适用于单列)

setHeaderWidth(int section, int width)

设置头部宽度

setSortingEnabled(bool)

设置是否启用排序

sortItems(int column, Qt.SortOrder order)

对指定列的内容进行排序: sortItems.AscendingOrder:升序排序 sortItems.DescendingOrder:降序排序

setRootIsDecorated(bool)

设置是否装饰根节点

topLevelItemCount()

返回根节点的数量

topLevelItem(index: int)

返回指定索引的根节点

setAllColumnsShowFocus(bool)

设置当项获得焦点时是否显示所有列

allColumnsShowFocus()

返回是否显示所有列

setAutoScroll(bool)

设置是否启用自动滚动

autoScroll()

返回是否启用了自动滚动

columnCount()

返回列数

setDragDropMode(DragDropMode mode)

设置拖放模式

dragDropMode()

返回拖放模式

setDragEnabled(bool)

设置是否启用拖放

dragEnabled()

返回是否启用了拖放

setDropIndicatorShown(bool)

设置是否显示下拉指示器

dropIndicatorShown()

返回是否显示下拉指示器

setUniformRowHeights(bool)

设置是否使用统一的行高

uniformRowHeights()

返回是否使用统一的行高

setWordWrap(bool enable)

设置是否启用文本换行

wordWrap()

返回是否启用了文本换行

expandAll()

展开所有项

collapseAll()

折叠所有项

expand(index: QModelIndex)

展开指定索引对应的项,通过indexFromItem方法获取索引

collapse(index: QModelIndex)

折叠指定索引对应的项,通过indexFromItem方法获取索引

setSelectionMode(mode)

设置选择模式(单选、多选等): QAbstractItemView.NoSelection:不允许选择。 QAbstractItemView.SingleSelection:一次只允许选择一个单元格。 QAbstractItemView.MultiSelection:允许选择多个单元格。 QAbstractItemView.ExtendedSelection:允许使用 Shift 或 Ctrl 键进行扩展选择。 QAbstractItemView.ContiguousSelection:只允许选择连续的项目

setEditTriggers(QAbstractItemView.EditTriggers)

QAbstractItemView.NoEditTriggers:禁止编辑 QAbstractItemView.DoubleClicked:双击编辑 QAbstractItemView.SelectedClicked:点击选中项时触发编辑 QAbstractItemView.AnyKeyPressed:按下任何键时触发编辑 QAbstractItemView.AllEditTriggers:启用所有编辑触发条件 组合触发条件时,条件之间用 | 隔开。

setAlternatingRowColors(bool enable)

设置是否使用交替行颜色

alternatingRowColors()

返回是否使用交替行颜色

setAnimated(bool enable)

设置是否启用动画

isAnimated()

返回是否启用了动画

setItemsExpandable(bool expandable)

设置项是否可展开

isItemsExpandable()

返回项是否可展开

setExpandsOnDoubleClick(bool expand)

设置是否在双击时展开项

expandsOnDoubleClick()

返回是否在双击时展开项

removeChild(child: Optional[QTreeWidgetItem])

删除指定子项

4.常用信号

方法

描述

itemClicked(QTreeWidgetItem *item, int column)

当用户双击一个项或者按回车键激活一个项时触发:item: 被单击的项,column: 被单击的列

itemActivated(QTreeWidgetItem *item, int column)

当用户双击一个项或者按回车键激活一个项时触发:item: 被激活的项,column: 被激活的列

itemChanged(QTreeWidgetItem *item, int column)

当一个项的内容发生改变时触发:item: 发生改变的项,column: 发生改变的列

itemCollapsed(QTreeWidgetItem *item)

当一个项被折叠时触发,item: 被折叠的项

itemDoubleClicked(QTreeWidgetItem *item, int column)

当用户双击一个项时触发:item: 被双击的项,column: 项被双击的列

itemExpanded(QTreeWidgetItem *item)

当一个项被展开时触发:item: 被展开的项

itemPressed(QTreeWidgetItem *item, int column)

当用户按下鼠标键时发出:item: 被按下的项,column: 项被按下的列

currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)

当前选中的项发生变化时发出:current: 新的当前选中项,previous: 之前的当前选中项

itemChanged(QTreeWidgetItem *item, int column)

当一个项的内容或属性发生改变时发出:item: 发生改变的项,column: 发生改变的列

itemEntered(QTreeWidgetItem *item, int column)

当鼠标进入一个项时发出:item: 鼠标进入的项,column: 项所在的列

itemSelectionChanged()

当项的选择状态发生变化时发出

Tags:show columns

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言