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://idctop.com/article/487586.html

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

相关推荐

  • mapreduce是什么?mapreduce入门教程

    MapReduce的核心价值在于将大规模分布式计算任务自动拆分为Map(映射)和Reduce(归约)两个阶段,通过并行处理实现海量数据的离线分析,是构建大数据底层架构的基石,在2026年的今天,虽然流式计算和实时引擎如Flink、Spark Streaming占据了实时场景的半壁江山,但MapReduce依然是……

    2026年5月26日
    4600
  • qq英雄传奇有哪些服务器,哪个区最火爆?

    QQ英雄传奇的服务器主要分为官方服务器和玩家自建服务器两大类,其中官方服务器通常按网络类型划分为电信区、网通区和双线区,具体开服列表以游戏内选服界面或官网最新公告为准,了解QQ英雄传奇的服务器分类官方服务器类型详解QQ英雄传奇作为一款多人在线竞技游戏,服务器架构直接决定了玩家的对战体验,官方服务器主要依据网络接……

    服务器运维 2026年8月20日
    500
  • 学Python需要什么学历?,Python学历要求高吗?

    学Python不需要学历门槛,但求职时学历会影响简历筛选和薪资起点,尤其是对于没有工作经验的转行者,学Python需要什么学历?这是转行者的第一问很多人一听到编程,第一反应就是“高学历才能学”,但Python这个语言本身,就是为降低编程门槛而设计的,它的语法接近自然语言,初学者不需要深厚的计算机理论基础就能上手……

    2026年7月20日
    600
  • 个人网站如何介绍产品?个人网站搭建教程

    个人网站不仅是展示名片,更是低成本获取精准流量、建立专业信任背书的核心资产,对于寻求职业突破或业务增长的个体而言,它是性价比最高的数字资产,在流量红利见顶的当下,依靠第三方平台获取客户或机会的成本越来越高,且受制于算法推荐的不确定性,拥有一个独立的个人网站,意味着你掌握了数据的完全所有权,能够构建私域流量池,实……

    2026年5月26日
    4500
  • 为什么服务器硬件更新慢?最新升级方案与优化建议

    服务器硬件老旧的现象在数据中心和企业IT环境中相当普遍,这并非简单的疏忽或预算不足,而是多种复杂因素权衡后的结果,背后涉及成本控制、风险规避、系统稳定性以及技术兼容性等多重考量,理解这些深层原因,并采取专业策略应对,是优化IT基础设施的关键, 成本压力:硬件采购与TCO的长期博弈高昂的初始投入: 企业级服务器……

    2026年2月7日
    11930
  • gpu服务器并发问题有哪些

    GPU服务器并发问题,本质上不是显卡算力不够,而是任务在显存、PCIe通道、CPU调度、网络栈之间争抢资源时引发的连锁故障,跑大模型训练或高并发推理时,最常见的表现是显存溢出、进程相互阻塞、GPU利用率跌成锯齿波,这些问题大多能从硬件拓扑、驱动配置、框架调度三个层面找到根因,GPU并发场景下的六大核心冲突GPU……

    2026年8月21日
    700
  • 百度AI视频教程怎么用?百度AI开放平台新手入门指南

    百度AI开放平台的视频教程是零基础开发者快速掌握API接入与模型调用的最高效路径,通过官方提供的标准化操作演示,用户可在短时间内完成从环境配置到代码落地的全流程闭环,在人工智能技术飞速迭代的2026年,对于大多数中小企业开发者而言,面对庞杂的AI文档往往感到无从下手,与其在晦涩的技术白皮书中摸索,不如直接观看由……

    2026年6月25日
    3400
  • 个人云端存储系统怎么用?有哪些好用的个人云盘推荐

    个人云端存储系统并非简单的网盘替代品,而是通过私有化部署或混合架构,在保障数据绝对主权与隐私安全的前提下,实现跨设备无缝同步的高效数字资产管理方案,为什么你需要从公有云转向个人云端存储过去十年,我们习惯了将照片、文档扔进各大互联网公司的服务器里,这种便利性的背后,隐藏着数据被扫描、被分析甚至被泄露的风险,随着……

    2026年6月17日
    3000
  • 个人电脑做服务器宽带ip地址不变?如何设置动态域名解析

    个人电脑做服务器且保持IP不变,最稳妥的方案是申请运营商固定IP或部署内网穿透服务,前者适合专业需求,后者适合家庭低成本搭建,很多技术爱好者希望将闲置的台式机或笔记本转化为私人服务器,用于存储数据、运行博客或搭建智能家居中枢,家庭宽带通常分配的是动态公网IP或大内网IP,每次重启路由器IP都会变化,导致外部访问……

    2026年5月27日
    4500
  • 谷安DevOps是什么?谷安DevOps平台好用吗

    谷安的DevOps实践核心在于通过自动化流水线与全链路监控,将软件交付周期缩短至分钟级,同时确保生产环境的稳定性与安全性,实现开发与运维的高效协同,在2026年的技术语境下,DevOps早已不再是简单的工具堆砌,而是一种融合了文化、流程与平台工程的系统性工程,谷安在这一领域的探索,并非盲目追逐最新的技术热点,而……

    2026年7月4日
    12700

发表回复

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