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

相关推荐

  • 如何用Python实现图论算法?python图论算法入门教程

    在 Python 中,图论(Graph Theory)通常通过专门的库来实现,最常用的是 NetworkX 和 igraph,对于大规模图或需要高性能计算的场景,还可以使用 Graph-tool 或结合 NumPy/SciPy 处理稀疏矩阵,下面我将以 NetworkX 为主,介绍 Python 中图论的基本操……

    2026年7月10日
    14600
  • 高维度数据可视化怎么做?高维数据可视化工具推荐

    高维度数据可视化是破解多维复杂数据黑盒的核心密钥,通过降维映射与交互探索,将抽象高维特征转化为直觉可决策的视觉叙事,高维度数据可视化的底层逻辑与行业演进破局“维度灾难”:从数值降维到视觉升维当数据特征维度突破三维物理限制,传统图表即刻失效,高维度数据可视化并非简单画图,而是通过算法重构空间关系:特征保真:在降维……

    2026年4月26日
    4600
  • 负载均衡f5配置中的常见难点有哪些,怎么解决?

    F5负载均衡是企业级网络架构中实现流量分发、业务高可用和应用安全防护的硬件设备,通常部署在数据中心入口,用于保障关键业务连续性,很多团队在选型时,会纠结用软件方案还是硬件方案,F5作为应用交付控制器(ADC)的老牌厂商,其核心价值在于将负载均衡、SSL卸载、Web应用防火墙、应用加速等能力集成到一台专用设备中……

    2026年7月23日
    1800
  • 个人服务器怎么绑定企业域名?个人服务器绑定域名教程

    个人服务器完全可以绑定企业域名,但必须完成ICP备案且服务器位于中国大陆,否则无法解析;若服务器在海外,则无需备案但受网络访问限制,个人服务器绑定企业域名的核心逻辑与合规门槛很多站长在搭建个人博客或小型应用时,习惯直接使用IP地址访问,或者购买廉价的免费域名,但当业务规模扩大,或者出于品牌保护的需求,将企业域名……

    2026年5月29日
    4700
  • gp数据库解锁

    GP数据库解锁的核心在于通过gpadmin用户执行psql命令或使用gpstop/gpstart工具链,结合权限审计日志确认无违规操作后,解除被锁定的表或用户账户,通常耗时在5分钟内完成,在大数据处理领域,Greenplum(简称GP)数据库因其强大的并行计算能力被广泛使用,随着数据量的激增和业务逻辑的复杂化……

    2026年6月25日
    4810
  • 域名添加CDN后无法解析?该域名已经添加cdn怎么解决

    该域名已经添加CDN意味着你的网站已通过内容分发网络加速,核心结论是:只要配置正确,访问速度将显著提升,且能有效抵御基础流量攻击,无需担心SEO排名下降,很多站长在后台看到“该域名已经添加cdn”的提示时,第一反应往往是焦虑,大家担心这会不会被百度判定为作弊,或者担心加速后的IP变动会影响收录,CDN(内容分发……

    2026年7月1日
    1100
  • 注册中文域名真的有必要吗,中文域名注册有什么用

    中文域名对百度SEO没有直接的排名加权作用,但对企业品牌保护、用户信任度提升以及搜索入口占位具有不可替代的战略价值, 它是“防御性资产”和“转化信任符号”,而非“流量加速器”,中文域名对SEO究竟有没有帮助?拆解百度排名机制的真实逻辑很多企业老板会问:“我注册了‘公司名.网址’,排名是不是就比同行靠前了?”答案……

    2026年9月16日
    100
  • gojs去水印怎么操作?gojs流程图去掉水印方法

    去除GoJS图表水印最直接有效的方法是移除License验证逻辑或替换为开源替代方案,但需注意商业授权合规性,GoJS作为业界领先的JavaScript图表库,其免费版本在图表角落强制显示“GoJS”水印,这不仅是视觉干扰,更直接暴露了项目未授权的状态,对于开发者而言,这不仅是美观问题,更是法律风险,许多团队在……

    2026年6月23日
    2500
  • 服务器如何给客户端发消息?,有哪些实现方法?

    服务器给客户端发消息,本质是建立一条从服务器主动发起的数据通道,核心技术是WebSocket、SSE或MQTT,选型取决于实时性要求和连接场景,很多人误以为网页只能“请求-响应”,服务器没法主动开口,从早期的轮询,到现在的WebSocket和SSE,服务器主动“说话”的技术已经非常成熟,下面直接拆解实现方式、适……

    服务器运维 2026年8月9日
    900
  • 个人网站banner怎么设计好看?个人网站banner尺寸规格是多少

    个人网站Banner不仅是视觉门面,更是决定用户停留时长与转化率的“第一触点”,其核心在于通过高对比度色彩、清晰的价值主张文案及响应式布局,在0.5秒内建立信任并引导行动,在数字化竞争日益激烈的2026年,个人品牌或独立站点的流量获取成本居高不下,许多创作者误以为Banner只是装饰性的图片,实则它是网站交互逻……

    2026年5月25日
    4800

发表回复

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