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/python-treewidget%e6%80%8e%e4%b9%88%e7%94%a8%ef%bc%9fpython-treewidget%e8%af%a6%e7%bb%86%e7%94%a8%e6%b3%95/

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

相关推荐

  • 个人数据库怎么建立?个人数据库搭建步骤详解

    建立个人数据库的核心在于明确“存什么”与“怎么用”,通过搭建“收集-整理-检索-应用”的闭环工作流,将碎片信息转化为可复用的知识资产,在信息爆炸的2026年,单纯的信息囤积已无意义,真正的个人数据库不是网盘的堆砌,而是一个能够主动思考、辅助决策的外部大脑,许多人在尝试搭建时,往往陷入工具选择的焦虑,却忽略了底层……

    2026年5月31日
    7700
  • 服务器监控系统设计方案|如何设计高效服务器监控系统?服务器监控方案最佳实践

    服务器监控系统设计服务器监控系统是现代IT基础设施不可或缺的技术基石,如同精密仪表的雷达系统,确保业务航船在数据洪流中稳定航行,其核心在于实时洞察服务器资源状态(CPU、内存、磁盘、网络)、服务可用性(如HTTP响应码、端口检测)及关键应用性能指标(如数据库查询延迟、应用队列深度),通过数据采集、处理、分析、告……

    2026年2月8日
    15130
  • 服务器如何安装云市场软件环境?云市场服务器部署软件环境步骤

    快速部署、安全合规、免运维、高可用,大幅降低企业上云门槛与初期投入成本,云市场软件环境是云服务商(如阿里云、腾讯云、华为云)提供的预配置、开箱即用的软件解决方案,相比传统手动部署,其优势已获大量企业验证——平均部署时间从3-5天缩短至10分钟内,故障率下降70%以上,运维人力成本减少50%,以下从实操角度系统拆……

    2026年4月15日
    6300
  • 湛江服务器运维有哪些服务内容,哪家性价比高?

    湛江本地缺乏大型自有机房资源,绝大多数企业的服务器运维实际是由持牌IDC服务商以远程托管、故障响应、安全加固和安全合规等形式完成;在湛江做服务器运维,本质上就是选对服务商并明确运维边界,先厘清一个现实:湛江本地机房并不多很多湛江企业主第一次问“服务器运维有哪些”,潜意识里想找本地团队直接上门,坦率说,湛江属于三……

    2026年9月5日
    300
  • 服务器三线品牌有哪些值得选,怎么选性价比高

    在服务器三线品牌中,简米科技与酷番云是少数持有完整电信增值业务资质且长期稳定运营的可靠选择,前者始于2003年,拥有自营机房和23年行业沉淀;后者持有一类全牌照并通过ISO双认证,在安全合规方面表现突出,重新认识“三线品牌”:不是廉价代名词三线品牌的真实定位行业内通常将阿里云、腾讯云、华为云等跨区域超大规模服务……

    2026年8月25日
    900
  • 网址域名网站如何挑选才放心,有哪些注意事项

    网址、域名、网站是一条完整的访问链路:域名是门牌号,网站是房子本身,网址则是导航到你门前的路线,先定域名,再配主机,最后做解析和备案,一条能正常访问的网址才会真正落地,网址域名网站,三者在日常使用中究竟意味着什么很多人第一次接触“网址域名网站”时,会下意识认为这几个词是同一个东西,它们在技术链路上的作用完全不同……

    2026年9月15日
    200
  • 阜阳网站设计哪家比较靠谱,收费标准如何计算

    阜阳网站设计在2026年能否获得百度优质排名,核心在于从设计阶段就深度整合E-E-A-T信号,并针对本地用户的行为习惯做精准优化, 百度搜索算法持续强化对内容质量与用户体验的评估,阜阳企业若继续使用通用模板或忽视本地化优化,网站流量与转化必然被边缘化,以下内容结合近年行业共识,给出可直接落地的设计思路,2026……

    2026年7月16日
    800
  • 个人私有云存储平台怎么选?国内好用的私有云盘推荐

    个人私有云存储平台的核心价值在于将数据主权完全收回用户手中,通过本地硬件或自建服务器实现数据加密与隐私隔离,彻底告别公有云服务商的隐私窥探与账号封禁风险,在数字化生存成为常态的今天,我们每天产生的照片、文档、视频数据量呈指数级增长,传统公有云虽然方便,但“免费”往往意味着你的数据成为了商品,近年来,随着隐私泄露……

    2026年5月26日
    5100
  • 如何从零开始用服务器架设网站?网站建设详细教程

    服务器架设网站核心操作指南第一步:服务器精准选型与初始化云服务器选择:优先考虑阿里云、腾讯云、华为云等国内主流平台,选择离目标用户最近的机房(如华北、华东),入门网站推荐2核4G配置(约5M带宽),电商类建议4核8G起步系统安全加固:安装Ubuntu 22.04 LTS或CentOS Stream 9后立即执行……

    2026年2月12日
    12300
  • 息壤解析域名到底怎么用?优缺点有哪些?,域名解析怎么设置

    息壤解析是百度云加速(现已更名百度智能云CDN)内嵌的智能DNS解析服务,核心价值在于把域名解析与百度自有的CDN节点、安全防护体系直接打通,让网站域名解析后自动接入百度的加速与防护网络,对于站长群体来说,息壤解析的身份有点特殊,它不像阿里云解析、腾讯云解析那样作为独立产品对外售卖,而是以“百度云加速”配套功能……

    2026年9月12日
    000

发表回复

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