GUI编程--PyQt5--QTreeWidget

文章目录

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

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)# QTreeWidgetself.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)# datadata = {"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_ = dictnode.setText(0, k)self.show_dict(v, node)elif isinstance(v, list):node = QTreeWidgetItem(self.q_tree)node.type_ = listnode.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_ = dictnode.setText(0, str(idx))self.show_dict(v, node)elif isinstance(v, list):node = QTreeWidgetItem(root)node.type_ = listnode.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_ = dictnode.setText(0, k)self.show_dict(v, node)elif isinstance(v, list):node = QTreeWidgetItem(root)node.type_ = listnode.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.hqwc.cn/news/184671.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

遵循开源软件安全路线图

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

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.…

【Android】使用XML资源文件存储配置项:降低代码耦合性并提高可重用性

前言 在Android开发中,我们经常需要存储一些配置项。 例如在创建Retrofit实例时,需要指定baseUrl。如果需要修改替换整个项目中的baseUrl,那将会是一件很痛苦的事情。 为了方便管理和维护这些配置项,我们可以使用资源文件来存储…

无需API实现MySQL与巨量引擎的对接

通过数环通,您可以使用不到几分钟的时间即可实现MySQL与巨量引擎的对接与集成,从而高效实现工作流程自动化,降本增效! 1.产品介绍 巨量引擎是字节跳动旗下的营销服务品牌,它整合了字节跳动旗下的产品及海量内容&#…

Spring Task使用介绍

文章目录 Spring Task介绍cron表达式入门案例Spring Task使用步骤全注解的方式代码开发测试结果 代码仓库 Spring Task 介绍 Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 定位定时任务框架 作用定时自动执行某段Java…

编程时不知道怎么给函数起一个好名字时怎么办

2023年11月16日,周四下午 解决办法 把函数的功能告诉ChatGPT,然后让它帮你给函数起名就可以了, 相信我,它取的名字真的很好。 举例说明 思维拓展 其实不光函数,变量、枚举等的名字也可以让ChatGPT取。

计算机网络:网络层ARP协议

在实现IP通信时使用了两个地址:IP地址(网络层地址)和MAC地址(数据链路层地址) 问题:已知一个机器(主机或路由器)的IP地址,如何找到相应的MAC地址? 为了解决…

DNS正向解析和主从复制

目录 概念 DNS解析 例:www.baidu.com. 解析过程 DNS查询方式 DNS的查询过程 DNS软件bind 正向解析(根据域名查找ip地址) 1.先安装bind软件 2.打开网卡配置文件 将DNS1改为自己本机 (更改完配置重启服务) 3.打…

SpringMVC调用流程

SpringMVC的调用流程 SpringMVC涉及组件理解: DispatcherServlet : SpringMVC提供,我们需要使用web.xml配置使其生效,它是整个流程处理的核心,所有请求都经过它的处理和分发![ CEO ] HandlerMapping : SpringMVC提供&…

SpringCloud微服务:Nacos快速入门

目录 第一步:cloud-demo的pom文件 第二步:user-service的pom文件 第三步: user-service的yml文件 第四步:order-service的pom文件 第五步: order-service的yml文件 运行 访问数据 1.Nacos服务搭建 下载安装包 …

如何深度了解汤泉场所?VR全景给你答案

天气逐步转凉,温泉、水会这些室内汤泉场所开始登上消费的主战场。伴随着人们物质生活水平的提高,人们对休闲养生会馆的要求也愈发旺盛,汤泉场所也逐渐从单一的洗浴开始向休闲、娱乐、保健、桑拿等多种业态形式发展,那么大家如何深…

java雷区?要小心的子父类代码!

目录 一段子父类调用重写的代码 1. 重写的代码 2. 执行结果 3. 分析原因 4. 总结概括 一段子父类调用重写的代码 这是一段有坑的代码,我们创建一个子类A和父类B,A中重写function方法,并且在B的构造方法中调用function 1. 重写的代码 …