【Python】QTreeWidget树形结构添加

源码:
# 参考网址: https://blog.csdn.net/weixin_42286052/article/details/129532631
import os.path
import sys
from PySide6.QtWidgets import QApplication,QMainWindow,QHBoxLayout,QVBoxLayout,QPushButton,QTreeWidget,QTreeWidgetItem,QTreeWidgetItemIterator
from PySide6.QtGui import QStandardItemModel,QStandardItem
from QTreeWidgetUi import Ui_MainWindow
from PySide6.QtCore import Qt,QAbstractItemModel
import configparserclass ParseNone():def __init__(self,fileName):self.config_path = os.path.join(os.path.dirname(__file__), fileName)self.config_ini = configparser.ConfigParser()self.config_ini.read(self.config_path,encoding="utf-8")# parser = ParseNone("config.ini")class TreeWidgetDemo(QMainWindow,Ui_MainWindow):def __init__(self, parent=None):super(TreeWidgetDemo, self).__init__(parent)self.setWindowTitle('TreeWidget 例子')self.setupUi(self)self.Listener()self.config = ParseNone("config.ini")self.tree = self.treeWidgetself.tree.setHeaderLabels(['中国省份城市'])# 设置列数self.tree.setColumnCount(1)self.tree.setColumnWidth(0, 100)self.preview = QTreeWidgetItem(self.tree) # 实例化一个项目。参数:指定父类self.preview.setText(0, '中国')self.preview.setCheckState(0, Qt.Unchecked)for root in self.config.config_ini.sections():items = self.config.config_ini.items(root)parent = QTreeWidgetItem(self.preview)parent.setText(0, root)parent.setCheckState(0, Qt.CheckState.Unchecked)for item in items:node = QTreeWidgetItem(parent)node.setText(0,item[1])node.setCheckState(0,Qt.Unchecked)# 参数1 复选框的位置 列序号# Qt.Unchecked 没选中# Qt.Checked 选中# Qt.PartiallyChecked 部分选中# self.tree.expandAll()# 让所有的项都是以打开状态显示的。注意必须要在所有项都已经实例化好之后再调用该方法,如果一开始就调用则会没有效果self.tree.itemClicked.connect(self.handleChanged)# def handleChanged(self, item, column):# count = item.childCount()# if item.checkState(column) == Qt.CheckState.Checked:# for i in range(count):# if item.child(i).checkState(0) != Qt.CheckState.Checked:# item.child(i).setCheckState(0,Qt.CheckState.Checked)## if item.checkState(column) == Qt.CheckState.Unchecked:# for i in range(count):# if item.child(i).checkState(0) != Qt.CheckState.Unchecked:# item.child(i).setCheckState(0,Qt.CheckState.Unchecked)def updateParentItems(self,item,column):parent = item.parent()if parent == None: returnparent.setCheckState(column, item.checkState(column))count = parent.childCount()for i in range(count):child = parent.child(i)if child.checkState(column) != parent.checkState(column):parent.setCheckState(column, Qt.CheckState.PartiallyChecked)breakself.updateParentItems(parent, column)def updateChildItems(self, item, column):count = item.childCount()for i in range(count):child = item.child(i)child.setCheckState(column,item.checkState(column))if child.childCount() > 0:self.updateChildItems(child, column)def handleChanged(self, item, column):# 注意,一定要先设置子节点,在设置父节点,不然现象比较奇怪self.updateChildItems(item, column)self.updateParentItems(item, column)self.GetSelectedNode(item, column)def GetSelectedNode(self,item, column):iterator = QTreeWidgetItemIterator(item)while iterator.value():item = iterator.value()# print(item.parent())if item.checkState(column) == Qt.CheckState.Checked:print(item.text(column))passiterator +=1def traverse(self):"""遍历节点"""n = self.treeWidget.topLevelItemCount() # 获取根节点数量for i in range(0, n):item = self.treeWidget.topLevelItem(i) # 循环获取根节点text = item.text(0) # 根节点文字信息(默认一列)count = item.childCount() # 获取当前根节点的子节点数量if count != 0:for j in range(0, count):string = item.child(j).text(0) # 子节点的文字信息print(string)def Listener(self):# 按钮的信号槽连接self.pushButton_add.clicked.connect(self.addTreeNodeBtn)self.pushButton_del.clicked.connect(self.delTreeNodeBtn)self.pushButton_modify.clicked.connect(self.updateTreeNodeBtn)def onTreeClicked(self, qmodelindex):item = self.tree.currentItem()print("key=%s ,value=%s" % (item.text(0), item.text(1)))def addTreeNodeBtn(self):item = self.tree.currentItem()print(item.parent(), item.childCount())node = QTreeWidgetItem(item)node.setText(0, 'newNode')node.setText(1, '10')def updateTreeNodeBtn(self):print('--- updateTreeNodeBtn ---')item = self.tree.currentItem()item.setText(0, 'updateNode')item.setText(1, '20')def delTreeNodeBtn(self):print('--- delTreeNodeBtn ---')item = self.tree.currentItem()root = self.tree.invisibleRootItem()for item in self.tree.selectedItems():(item.parent() or root).removeChild(item)if __name__ == '__main__':app = QApplication(sys.argv)tree = TreeWidgetDemo()tree.show()sys.exit(app.exec())
[中国]
node1 = 北京
node2 = 上海
node3 = 重庆
node4 = 天津
node5 = 广东[广东]
node1 = 广州
node2 = 深圳
node3 = 东莞[贵州]
node1 = 贵阳
node2 = 遵义
node3 = 安顺
相关文章:
【Python】QTreeWidget树形结构添加
源码: # 参考网址: https://blog.csdn.net/weixin_42286052/article/details/129532631 import os.path import sys from PySide6.QtWidgets import QApplication,QMainWindow,QHBoxLayout,QVBoxLayout,QPushButton,QTreeWidget,QTreeWidgetItem,QTreeW…...
day 2 2.3.2 类和对象
具有相同或相似性质的一组对象的抽象就是类 null只能被转换成引用类型,不能转换成基本类型,因此不要把一个null值赋给基本数据类型的变量 Java语言支持的类型分为两类:基本类型和引用类型 基本类型包括boolean类型和数值类型。数值类型有整…...
vscode虚拟环境使用jupyter
在某虚拟环境内安装torch,但是ipyn文件保存后无法正常导入torch 1.conda环境下安装Jupyter等一切配置,进入虚拟环境 2.conda install nb_conda_kernels 3.安装完成后重新打开VSCode,在运行Jupyter notebook中的代码之前,在右上…...
Maven 依赖管理
Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。 可传递性依赖发现 …...
【踩坑】hive脚本笛卡尔积严重降低查询效率问题
前一阵子查看我们公司的大数据平台的离线脚本运行情况, 结果发现有一个任务居然跑了一天多, 要知道这还只是几千万量级的表, 且这个任务是每天需要执行的 于是我把hive脚本捞出来看了下, 发现无非多join了几个复杂的子查询, 应该不至于这么久, 包括我又检查了是不是没有加上每…...
【C进阶】内存函数
strcpy拷贝的仅仅是字符串,但是内存中的数据不仅仅是字符,所以就有了memcpy函数 1. memcpy void *memcpy (void * destination ,const void * source , size_t num) 函数memcpy从source的位置开始向后拷贝num个字节的数据到desti…...
h2database BTree 设计实现与查询优化思考
h2database 是使用Java 编写的开源数据库,兼容ANSI-SQL89。 即实现了常规基于 BTree 的存储引擎,又支持日志结构存储引擎。功能非常丰富(死锁检测机制、事务特性、MVCC、运维工具等),数据库学习非常好的案例。 本文理论…...
Linux命令(100)之sz
linux命令之sz 1.sz介绍 linux命令sz是用来把文件从Linux平台下载到Windows上 2.sz用法 sz [参数] file sz参数 参数说明-b使用binary的方式下载,不解释字符为ascii-y相同文件名,覆盖-E相同文件名,不会将其覆盖,而是会在所上传…...
Insight h2database SQL like 查询
我们认为的 SQL like 查询和优化技巧,设计的初衷和真正的实现原理是什么。 在 h2database SQL like 查询实现类中(CompareLike),可以看到 SQL 语言到具体执行的实现、也可以看到数据库尝试优化语句的过程,以及查询优化…...
wpf中listview内容居中显示
在WPF中使用ListView经常会用到GridView作为视图,但是却碰到GridViewColumn不能居中对齐的问题, 实现方法 给ListViewItem设置Style,让ListViewItem在水平方向拉伸填充: <Setter Property"HorizontalContentAlignment" Value&…...
第二章 C++的输出
系列文章目录 第一章 C的输入 文章目录 系列文章目录前言一、个人名片二、cout三、printf总结 前言 今天来学C的输出吧! 一、个人名片 二、cout cout 三、printf printf 总结 最近懒得写博客怎么办?...
Qt中常用容器组控件介绍和实操
目录 常用容器组控件(Containers): 1.Group Box 2.Scroll Area 3.Tab Widget 4.Frame 5.Dock Widget 常用容器组控件(Containers): 控件名称依次解释如下(常用的用红色标出): Group Box: 组合框: 提供带有标题的组合框框架Scroll Area…...
kafka、rabbitmq 、rocketmq的区别
一、语言不同 RabbitMQ是由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上。 kafka是采用Scala语言开发,它主要用于处理活跃的流式数据,大数据量的数据处理上 RocketMQ是采用java语言开发的 二、吞吐量 kafka吞吐量更高&…...
java的amazonaws接口出现无法执行http请求:管道中断
java使用amazonaws的接口上传文件到minio出现以下异常: com.amazonaws.SdkClientException: Unable to execute HTTP request: Broken pipe (Write failed) at com.amazonaws.http.AmazonHttpClient R e q u e s t E x e c u t o r . h a n d l e R e t r y a b l e…...
cmake 多线程编译 指定 Visual Studio 编译器 命令行
当使用CMake来配置和构建一个Visual Studio 项目时,以下命令是关键的。 第一行是用于配置项目,而第二行用于构建项目。 Visual Studio 15 2017 Visual Studio 16 2019 Visual Studio 17 2022 在CMake中,DCMAKE_BUILD_TYPE是用于指定项目的构建…...
将 mysql 数据迁移到 clickhouse (最新版)
一、前驱知识 已经在mysql中插入了海量的数据了,这个时候mysql 承载不了这么大的数据,并且数据只需要查询,修改和删除非常少,并且不需要支持事务,这个时候需要换一个底层存储,这里选用的是 clickhouse 来进…...
LeetCode 69.x的平方
LeetCode 69.x的平方 思路: 二分查找。从1到x进行二分查找,每次判断mid的平方是否<x, 如果是,则更新ansmid,并缩小区间; 如果不是,则缩小区间; 最后则找到最接近的ans࿰…...
【小白入门】ASP.NET Core 创建 Web API
ASP.NET Core 支持使用 C# 创建 RESTful 服务,也称为 Web API。 若要处理请求,Web API 使用控制器。 Web API 中的 控制器 是派生自 ControllerBase 的类。 本文介绍了如何使用控制器处理 Web API 请求。 Web API 包含一个或多个派生自 ControllerBase …...
如何使用摩尔信使MThings连接网络设备
帽子: 摩尔信使MThings支持Modbus-TCP、Modbus-RTU Over TCP、Modbus-TCP Over UDP、Modbus-RTU Over UDP。 TCP链接中,摩尔信使MThings支持灵活的连接方式,主机可作为客户端也可以作为服务端,同时支持模拟从机以客户端方式向远…...
2023自动驾驶 车道线检测数据集
目录 2023自动驾驶 车道线检测关键数据集 下载链接 labelme标注制作数据: 车道线分割项目记录-tusimple数据集处理 2023自动驾驶 车道线检测关键数据集 下载链接 2023自动驾驶 车道线检测关键数据集 下载链接_Xiaobai_Zhao的博客-CSDN博客 labelme标注制作数据:...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
