python treewidget怎么用?python treewidget详细用法

在 Python 中,QTreeWidget 是 PyQt5/PyQt6 或 PySide2/PySide6 中用于创建树形控件的类,它提供了一种直观的方式来展示层级数据,比如文件目录、组织架构等。

下面我将详细介绍如何使用 QTreeWidget,包括基本用法、添加节点、设置信号槽、自定义样式等。

python实战之pywifi
加载中
python实战之pywifi

基本用法

示例:创建一个简单的树形控件

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTreeWidget, QTreeWidgetItem, QVBoxLayout
class TreeWidgetExample(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()
    def init_ui(self):
        # 创建主布局
        layout = QVBoxLayout()
        # 创建 QTreeWidget
        self.tree_widget = QTreeWidget()
        self.tree_widget.setHeaderLabels(["Name", "Value"])
        # 添加根节点
        root_item = QTreeWidgetItem(self.tree_widget, ["Root"])
        # 添加子节点
        child1 = QTreeWidgetItem(root_item, ["Child 1", "Value 1"])
        child2 = QTreeWidgetItem(root_item, ["Child 2", "Value 2"])
        # 添加孙节点
        grandchild = QTreeWidgetItem(child1, ["Grandchild", "Value 3"])
        

python treewidget怎么用?python treewidget详细用法

# 展开根节点 root_item.setExpanded(True) # 将树形控件添加到布局中 layout.addWidget(self.tree_widget) # 设置窗口布局 self.setLayout(layout) self.setWindowTitle("QTreeWidget Example") self.resize(300, 200) if __name__ == "__main__": app = QApplication(sys.argv) window = TreeWidgetExample() window.show() sys.exit(app.exec_())

动态添加节点

你可以动态地向树中添加节点,例如根据用户操作或数据加载。

def add_child_to_item(parent_item, name, value=""):
    child = QTreeWidgetItem(parent_item, [name, value])
    return child
# 示例:向 root_item 添加新子节点
new_child = add_child_to_item(root_item, "New Child", "New Value")

设置信号槽

QTreeWidget 支持多种信号,

  • itemClicked:当用户点击某个项目时触发。
  • itemDoubleClicked:当用户双击某个项目时触发。
  • currentItemChanged:当前选中项改变时触发。

示例:处理点击事件

def on_item_clicked(item, column):
    print(f"Clicked item: {item.text(column)}")
self.tree_widget.itemClicked.connect(on_item_clicked)

python treewidget怎么用?python treewidget详细用法


自定义样式

你可以使用 QSS(Qt Style Sheets)来自定义 QTreeWidget 的外观。

示例:设置背景颜色和字体

self.tree_widget.setStyleSheet("""
    QTreeWidget {
        background-color: #f0f0f0;
        font-family: Arial;
        font-size: 12px;
    }
    QTreeWidget::item {
        padding: 5px;
    }
    QTreeWidget::item:selected {
        background-color: #0078d7;
        color: white;
    }
""")

加载数据到树形控件

假设你有一个嵌套的字典结构,可以递归地将其加载到树形控件中。

示例:从字典加载数据

def load_data_to_tree(tree_widget, data, parent_item=None):
    for key, value in data.items():
        if isinstance(value, dict):
            item = QTreeWidgetItem(parent_item, [key])
            load_data_to_tree(tree_widget, value, item)
        else:
            QTreeWidgetItem(parent_item, [key, str(value)])
# 示例数据
data = {
    "Root": {
        "Child 1": "Value 1",
        "Child 2": {
            "Grandchild 1": "Value 3",
            "Grandchild 2": "Value 4"
        }
    }
}
# 加载数据
load_data_to_tree(self.tree_widget, data)

python treewidget怎么用?python treewidget详细用法


禁用某些节点

你可以禁用某些节点,使其不可选。

child1.setFlags(child1.flags() & ~Qt.ItemIsSelectable)

排序节点

你可以对树形控件中的节点进行排序。

self.tree_widget.sortByColumn(0, Qt.AscendingOrder)

搜索节点

你可以遍历树形控件,查找特定节点。

def find_item(tree_widget, text):
    items = tree_widget.findItems(text, Qt.MatchExactly)
    return items
# 示例:查找名为 "Child 1" 的节点
found_items = find_item(self.tree_widget, "Child 1")
for item in found_items:
    print(f"Found item: {item.text(0)}")

QTreeWidget 是一个非常强大的控件,适合展示层级数据,通过结合信号槽、自定义样式和动态数据加载,你可以创建一个功能丰富且美观的树形控件。

如果你有更具体的需求(例如拖放操作、右键菜单等),可以进一步扩展 QTreeWidget 的功能。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/487586.html

(0)
dcp-9020cdn打印机不打印怎么办,兄弟dcp-9020cdn
上一篇 2026年7月12日 15:49
python treewidget怎么用?python treewidget详解
下一篇 2026年7月12日 15:54

相关推荐

  • 个人号怎么开发小程序?个人小程序开发教程

    个人号无法直接注册小程序,必须通过“小程序·快应用”或“个体户营业执照”认证主体,目前主流且合规的路径是注册个体工商户后完成主体认证,即可拥有完整的小程序发布权限,很多人误以为像注册微信公众号一样,用个人身份证就能直接上线小程序,这其实是行业内的常见误区,早在几年前,微信和百度等平台就收紧了个人主体的权限,主要……

    2026年6月12日
    7500
  • 电脑分辨率越高越好吗,分辨率怎么调最合适

    分辨率,简单说就是屏幕上像素点的数量,它直接决定了画面的精细程度,但实际选择中,盲目追求高分辨并不可取,需要根据你的设备尺寸、使用场景和硬件性能来权衡,分辨率到底是什么?影响画质的关键因素分辨率的基本概念:像素点的数量分辨率定义了屏幕或图像在水平和垂直方向上的像素点阵,比如1920×1080,代表水平1920个……

    2026年7月30日
    1500
  • 服务器应用管理器怎么打开?服务器应用管理器功能详解

    服务器应用管理器是现代IT基础设施实现自动化运维、保障业务连续性与提升资源利用率的核心枢纽工具,在复杂的混合云架构与微服务环境下,企业若缺乏高效的管理工具,将面临运维响应滞后、故障排查困难及安全合规风险剧增的严峻挑战,通过部署专业的服务器应用管理器,企业能够将原本离散的运维动作标准化、流程化,实现从被动救火向主……

    2026年4月7日
    7400
  • 服务器已经停止是什么原因,服务器停止响应怎么解决

    服务器突然停止运行,往往意味着业务中断、数据丢失风险增加以及用户体验的急剧下降,解决这一问题的核心在于迅速排查故障源头并执行恢复操作,同时建立长效机制以预防再次发生,面对这一紧急状况,必须保持冷静,按照标准化的排查流程,从连接、资源、系统日志到硬件状态逐一筛选,才能在最短时间内恢复服务,最大限度降低损失,故障初……

    2026年4月11日
    8000
  • 美区服务器手游有哪些好玩的,哪个最好玩?

    指那些将游戏服务器部署在美国、或主要面向北美地区玩家提供服务的手游,玩家通常需通过注册美区App Store/Google Play账号或使用加速器才能顺畅游玩,这类游戏在账号体系、支付方式、网络延迟和运营活动上与国服差异明显,既包含大量全球热门大作,也催生了围绕“美区服务器”的IDC服务产业链,美区服务器手游……

    服务器运维 2026年8月23日
    200
  • 服务器布置vs项目哪个重要?服务器部署项目流程详解

    服务器布置与项目的深度融合,是决定数字化建设成败的关键枢纽,核心结论在于:服务器布置并非孤立的技术操作,而是项目全生命周期管理的基石,许多技术团队常将服务器配置视为项目开发后期的“附属环节”,这种认知偏差往往导致项目上线后出现性能瓶颈、数据安全隐患及运维灾难,真正的专业实践表明,服务器布置必须前置规划,与项目架……

    2026年4月4日
    7400
  • PVP服务器必装插件有哪些,哪个最好用?

    PVP服务器插件选型直接影响玩家的战斗体验与服务器留存率,核心必备插件包括反作弊、领地保护、经济系统、排行榜、战斗机制优化、地皮管理六大类,同时服务器硬件的稳定性与低延迟同样关键,选择持自营机房的IDC服务商能从根本上保障插件运行效率,反作弊插件——公平竞技的底线PVP服务器中,作弊行为是玩家流失的首要原因,反……

    2026年8月20日
    400
  • 服务器怎么做存储共享数据库,如何实现服务器数据库共享存储?

    服务器实现存储共享数据库的核心在于构建高可用、高性能的底层存储架构,并选择合适的数据共享方案,直接结论是:企业应优先采用SAN存储区域网或分布式存储系统,结合数据库集群技术,实现数据块级别的实时共享与冗余保护,而非简单的文件级共享, 这种架构能确保数据的一致性、完整性以及并发访问的高效性,是生产环境中的最佳实践……

    2026年3月19日
    10600
  • 服务器和客户端硬件要求分别是什么?,怎么选?

    分服务器拼的是CPU多核性能和内存容量,客户端拼的是显卡性能和CPU单核能力, 想要流畅运行,就得按这个思路分别配置,用错方向往往花了钱还卡顿,分服务器硬件要求:CPU和内存才是主角分服务器(专用服务器)的本职工作是处理所有玩家的数据请求、同步游戏状态、保存进度,它不负责画面渲染,所以显卡基本可以忽略,真正决定……

    2026年8月8日
    1100
  • 服务器零件概念股有哪些龙头股,值得买吗?

    服务器零件概念股是指A股市场中深度参与服务器核心硬件研发与制造的上市公司,覆盖CPU/GPU芯片、内存、PCB、光模块、散热和电源等关键环节,是数字基建的直接受益方向,服务器核心计算零件CPU与GPU芯片服务器靠算力吃饭,芯片是心脏,CPU方面,国内能拿上台面的主要是**海光信息**(x86架构,兼容性好,数据……

    2026年7月29日
    1300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注