GUI编程--PyQt5--QTreeWidget

news2024/12/27 13:12:13

文章目录

  • 树型控件展示数据
  • 修改节点数据
  • 获取所有节点的数据

Qt模组参考
QWidgets
QTreeWidget

树型控件展示数据

展示数据的同时,每个节点标注数据类型。
在这里插入图片描述


class MyWindow(QWidget):
    def __init__(self, title):
        super(MyWindow, self).__init__()
        self.setWindowTitle(title)
        self.resize(500, 300)
        self.set_ui()

    def set_ui(self):
        # 显示图片
        label = QLabel(self)
        label.setText("xxxxx")
        qimg = QPixmap("./bg.jpg")
        qimg.scaledToHeight(120)
        qimg.scaledToWidth(200)
        label.setPixmap(qimg)
        label.resize(200, 120)
        label.move(100, 200)

        # QTreeWidget
        self.q_tree = QTreeWidget(self)
        self.q_tree.setColumnCount(3)
        self.q_tree.setHeaderLabels(["a", "b", "c"]) # 设置表头
        self.q_tree.setFixedWidth(500)
        self.q_tree.setFixedHeight(460)
        self.q_tree.move(80, 80)
        self.q_tree.itemDoubleClicked.connect(self.modify_slot)
        # 选择不同的节点时的信号
        # self.q_tree.currentItemChanged.connect(self.data_change_slot)
        # data
        data = {
            "d1": {
                "name": "jack",
                "age": 20,
                "friends": ["tom", "lucy"],
                "bid": [1, 3, 6]
            },
            "d2": [1.4, 3.2, 6.7],
            "d3": 3.14
        }
        # 展示数据
        self.show_data(data)

    def show_data(self, data):
        """ 展示数据 """
        for k, v in data.items():
            if isinstance(v, dict):
                node = QTreeWidgetItem(self.q_tree)
                node.type_ = dict
                node.setText(0, k)
                self.show_dict(v, node)
            elif isinstance(v, list):
                node = QTreeWidgetItem(self.q_tree)
                node.type_ = list
                node.setText(0, k)
                self.show_list(k, v, node)
            else:
                node = QTreeWidgetItem(self.q_tree)
                node.type_ = type(v)
                node.setText(0, k)
                node.setText(1, str(v))

    def show_list(self, key, data, root):
        """ 展示列表 """
        for idx, v in enumerate(data):
            if isinstance(v, dict):
                node = QTreeWidgetItem(root)
                node.type_ = dict
                node.setText(0, str(idx))
                self.show_dict(v, node)
            elif isinstance(v, list):
                node = QTreeWidgetItem(root)
                node.type_ = list
                node.setText(0, str(idx))
                self.show_list(idx, v, node)
            else:
                node = QTreeWidgetItem(root)
                node.type_ = type(v)
                node.setText(0, key + f"[{root.childCount() - 1}]")
                node.setText(1, str(v))

    def show_dict(self, data, root):
        """ 递归展示字典 """
        for k, v in data.items():
            if isinstance(v, dict):
                node = QTreeWidgetItem(root)
                node.type_ = dict
                node.setText(0, k)
                self.show_dict(v, node)
            elif isinstance(v, list):
                node = QTreeWidgetItem(root)
                node.type_ = list
                node.setText(0, k)
                self.show_list(k, v, node)
            else:
                node = QTreeWidgetItem(root)
                node.type_ = type(v)
                node.setText(0, k)
                node.setText(1, str(v))

    def data_change_slot(self, *args):
        print("args:", args)

    def modify_slot(self, treeWidgetItem, idx):

        cur_value = treeWidgetItem.text(idx)
        print("cur_value:", cur_value, treeWidgetItem.type_)

        # 设置节点可编辑
        treeWidgetItem.setFlags(treeWidgetItem.flags() | Qt.ItemIsEditable)
        # 设置编辑框的样式

        # QTreeWidgetItem

修改节点数据

  • 双击每个节点,实现修改数据item.setFlags(Qt.ItemIsEditable);
  • 可编辑时,设置样式
在这里插入代码片

获取所有节点的数据

  • 数据还原为字典;
  • 数据类型还原;
在这里插入代码片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1217787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qt笔记之qml和C++的交互系列(一):初记

code review! —— 杭州 2023-11-16 夜 文章目录 一.qt笔记之qml和C的交互:官方文档阅读理解0.《Overview - QML and C Integration》中给出五种QML与C集成的方法1.Q_PROPERTY:将C类的成员变量暴露给QML2.Q_INVOKABLE()或public slots:将C类…

【面试经典150 | 数学】回文数

文章目录 写在前面Tag题目来源题目解读解题思路方法一:反转一半数字 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本…

遵循开源软件安全路线图

毫无疑问,开源软件对于满足联邦任务所需的开发和创新至关重要,因此其安全性至关重要。 OSS(运营支持系统) 支持联邦政府内的每个关键基础设施部门。 联邦政府认识到这一点,并正在采取措施优先考虑 OSS 安全&#xff…

Android Jetpack的组件介绍,常见组件解析

jetpack组件有哪些 Android Jetpack是一个集成Android应用程序组件的一站式解决方案。它使开发人员能够专注于他们的应用程序的真正创新部分,而不会受到Android平台特定的限制。Jetpack组件可分为四个类别: 架构组件(Architecture Componen…

IDEA无法查看源码是.class,而不是.java解决方案?

问题:在idea中,ctrl鼠标左键进入源码,但是有时候会出现无法查看反编译的源码,如图! 而我们需要的是方法1: mvn dependency:resolve -Dclassifiersources 注意:需要该模块的目录下,不是该文件目…

STM32_SPI总线驱动OLED详细原理讲解

目录 这里写目录标题 第13章 Cortex-M4-SPI总线13.1 SPI总线概述13.1.1 SPI总线介绍13.1.2 SPI总线接口与物理拓扑结构13.1.3 SPI总线通信原理13.1.4 SPI总线数据格式 13.2 IO口模拟SPI操作OLED13.2.1 常见的显示设备13.2.2 OLED显示屏概述13.2.3 OLED特征13.2.4 显示原理13.2.…

stylelint报错at-rule-no-unknown

stylelint报错at-rule-no-unknown stylelint还将各种 sass -rules 标记mixin为include显示未知错误 at-rule-no-unknown ✖ stylelint --fix:Deprecation warnings: 78:1 ✖ Unexpected unknown at-rule "mixin" at-rule-no-unknown 112:3 ✖ Unexpected un…

第四章 串【24王道数据结构笔记】

1.串的基本概念 串,即字符串 (String) 是由零个或多个字符组成的有限序列。一般记为Sa1a2.....an(n>0) S"HelloWorld!" TiPhone 11 Pro Max? 其中,S是串名,单引号括起来的字符序列是串的值;a;可以是字母、数字或其他字符;串中…

DocCMS keyword SQL注入漏洞复现 [附POC]

文章目录 DocCMS keyword SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 DocCMS keyword SQL注入漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测…

idea中误删.iml和.idea文件,如何处理

目录 一、问题描述 二、解决方案 1、理论知识 (1).iml 文件 (2).idea文件 2、操作环境 3、操作步骤 (1)找到【Maven】工具按钮 (2)点图标,重复导入maven项目&am…

Pikachu漏洞练习平台之XXE(XML外部实体注入)

目录 什么是 XML? 什么是DTD? 什么是XEE? 常见payload 什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language); XML 不会做任何事情,而是用来结构化、存储以及传输信息…

promise时效架构升级方案的实施及落地 | 京东物流技术团队

一、项目背景 为什么需要架构升级 promise时效包含两个子系统:内核时效计算系统(系统核心是时效计算)和组件化时效系统(系统核心是复杂业务处理以及多种时效业务聚合,承接结算下单黄金流程流量)&#xff…

SPASS-参数估计与假设检验

参数估计 点估计 点估计用样本统计量的值直接作为总体参数的估计值。如用样本均值直接作为总体均值的估计值,用样本方差直接作为总体方差的估计值等。 常用的点估计法 (1)矩估计法 (2)极大似然估计法 (3)稳健估计法 区间估计 因为点估计直接用样本估计值作为总体参数…

苹果MAC安装绿盾出现问题,安装时没有出现填服务器地址的页面,现在更改不了也卸载不了绿盾 怎么处理?

环境: Mac mini M1 Mac os 11.0 绿盾v6.5 问题描述: 苹果MAC安装绿盾出现问题,安装时没有出现填服务器地址的页面,现在更改不了也卸载不了绿盾 怎么处理? 解决方案: 大部分企业是Windows和Mac终端混合使用,在进行文档加密管理时通常会遇到不兼容的现象,而为了统一…

Ubuntu 18.04无网络连接的n种可能办法

文章目录 网络图标消失,Ubuntu无网络连接VMware上Ubuntu18.04,桥接了多个网卡,其中一个用来上网,均设置为静态ip网络桥接链路没有接对路由不对 网络图标消失,Ubuntu无网络连接 sudo service network-manager stop sud…

python趣味编程-5分钟实现一个谷歌恐龙游戏(含源码、步骤讲解)

Python 恐龙游戏是为想要学习 Python 的初学者创建的。该项目系统使用了 Pygame 和 Random 模块。 Pygame 是一组跨平台的 Python 模块,专为编写视频游戏而设计。 Python 中的 Dino Game有一个任务记录,其中包含图片文档和 Python 内容(dino.py)。 GUI 使用 pygame 库。

Linux C 线程间同步机制

线程间同步机制 概述保护机制互斥锁创建互斥锁  pthread_mutex_init加锁  pthread_mutex_lock解锁  pthread_mutex_unlock删除锁  pthread_mutex_destroy 条件变量创建条件变量  pthread_cond_init激活条件变量  pthread_cond_signal等待条件变量  pthread_cond_…

Sentinel规则

一、服务熔断测试 例子: application.properties配置文件 server.port8083spring.application.nameorder#spring.cloud.nacos.discovery.server-addrhttp://192.168.44.64:80spring.cloud.nacos.discovery.server-addrlocalhost:8848spring.cloud.sentinel.transport.port999…

基于单片机的智能家居安保系统(论文+源码)

1.系统设计 本次基于单片机的智能家居安保系统设计,在功能上如下: 1)以51单片机为系统控制核心; 2)温度传感器、人体红外静释电、烟雾传感器来实现检测目的; 3)以GSM模块辅以按键来实现远/近程…

Nginx(四) absolute_redirect、server_name_in_redirect、port_in_redirect 请求重定向指令组合测试

本篇文章主要用来测试absolute_redirect、server_name_in_redirect和port_in_redirect三个指令对Nginx请求重定向的影响,Nginx配置详解请参考另一篇文章 Nginx(三) 配置文件详解 接下来,在Chrome无痕模式下进行测试。 测试1:absolute_redi…