QTreeWidget折叠子项(折叠当前项的所有子项)

本文仅供本人知识总结使用,所以内容会比较浅显,不喜勿喷。

一、仅折叠子项

首先 Qt 已经提供了QTreeWidgetItem.setExpanded(expand)函数,当expand为true,则展开该项,否则折叠该项;搭配上QTreeWidgetItem.isExpanded()函数使用,即可完成折叠子项。

# 获取到当前项
item = self.ui.treeWidget.currentItem()
# 根据当前项状态,来设置展开或折叠
item.setExpanded(not item.isExpanded())

二、折叠当前项的所有子项

不过,配合QTreeWidgetItemIterator以及参数HasChildren,便可实现折叠当前项的所有子项。

# 获取起始节点
item = self.ui.treeWidget.currentItem()
# 存储当前项的状态
enable = item.isExpanded()
# 从item开始迭代 配合参数HasChildren 仅迭代有子节点的节点
it = QTreeWidgetItemIterator(item, QTreeWidgetItemIterator.HasChildren)
while it.value() != None:
it.value().setExpanded(enable)
it=it.__iadd__(1)
# 是否是根节点 当前节点是否为空
if item.parent() != None and it.value() != None:
# 如果当前节点的父节点和起始节点父节点一致时 则退出循环
if item.parent() == it.value().parent():
break

三、递归折叠当前项的所有子项

因为当时QT6的文档都是靠机翻的,一时没找到这个迭代器,就想了用递归的方式,但是代码实现有点问题,然后又发现了迭代器这个东西,这代码就不研究了,希望有哪位大佬能指正一下。

该方法未成功实现递归折叠当前项的所有子项功能!

def treeWidget_itemExpanded_AllChildren(item,enable,flag_item):
# 当前项有子项时 扫描它的子项是否还有 子子项
if item.childCount() > 0:
for i in range(0, item.childCount()):
item_c = item.child(i)
# 如果有子子项 and 当前子项没折叠 就递归扫描
if item.childCount() > 0 and item_c.isExpanded():
item = item_c
# 如果子项没有 子子项了
else:
item.setExpanded(enable)
if item.parent() == flag_item.parent():
return ; else:
item = item.parent()
treeWidget_itemExpanded_AllChildren(item, enable, flag_item)

PySide6/PyQt开发xml编辑器(1)的更多相关文章

  1. 雷林鹏分享:XML 编辑器

    XML 编辑器 如果您希望极认真地学习和使用 XML,那么您一定会从一款专业的 XML 编辑器的使用上受益. XML 是基于文本的 XML 是基于文本的标记语言. 关于 XML 的一件很重要的事情是, ...

  2. MyEclipse XML & XML架构教程:XML编辑器

    [MyEclipse CI 2019.4.0安装包下载] 1. MyEclipse中的XML编辑 本文档介绍了MyEclipse XML Editor中可用的一些函数.MyEclipse XML编辑器 ...

  3. Flex xml编辑器(老外写的)

    github上的一个项目老外写的xml编辑器,灵活利用了Tree的labelFunction实现节点运行时展现.开源地址是 https://github.com/softinsure/XML-Edit ...

  4. C# 开发XML Web Service与Java开发WebService

    一.web service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量 ...

  5. MVC开发Markdown编辑器(2)

    MVC开发Markdown编辑器(2) MVC Markdown 实时预览 我希望实现一个在线实时预览的Markdown编辑器,左边是编辑处,右边是实时预览界面. 准备工作 引入相关js和css 这里 ...

  6. MVC开发Markdown编辑器(1)

    MVC markdown MVC开发Markdown编辑器(1) 前言 安装 解析 结束语 前言 想在近段时间通过mvc开发个人博客,编辑器希望是markdown风格的,这样写文字会很方便.首先先解决 ...

  7. iOS开发 XML解析和下拉刷新,上拉加载更多

    iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...

  8. 使用ICSharpCode.TextEditor制作一个语法高亮显示的XML编辑器

    使用ICSharpCode.TextEditor制作一个语法高亮显示的XML编辑器 品高工作流 的流程模拟器中使用了一个具有语法高亮和折叠功能的XML编辑器,其核心就是用了SharpDevelop中的 ...

  9. PyQt开发案例:结合QDial实现的QStackedWidget堆叠窗口程序例子及完整代码

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.案例说明 本案例是老猿在学习QStackedWidget中的一个测试案例,该案例使用QStack ...

随机推荐

  1. Java多线程—线程同步(单信号量互斥)

    JDK中Thread.State类的几种状态 线程的生命周期         线程的安全问题(同步与互斥) 方法一:同步代码块 多个线程的同步监视器(锁)必须的是同一把,任何一个类的对象都可以 syn ...

  2. learnByWork

    2019.5.5(移动端页面) 1.页面的整体框架大小min-width: 300px~max-width: 560px: 2.具体大小单位用px: 3.网页布局用div不是table,在特殊情况,如 ...

  3. Json序列化与反序列化导致多线程运行速度和单线程运行速度一致问题

    紧跟上篇文章 十个进程开启十个bash后一致写入命令执行完毕之后产生了很多很多的文件,博主需要对这些文件同意处理,也就是说对几十万个文件进行处理,想了又想,单线程处理那么多数据肯定不行,于是乎想到了使 ...

  4. jQuery操作标签,jQuery事件操作,jQuery动画效果,前端框架

    jQuery操作标签 jQuery代码查找标签绑定的变量名推荐使用 $xxxEle 样式类操作 addClass();// 添加指定的CSS类名. removeClass();// 移除指定的CSS类 ...

  5. 伪元素选择器,选择器优先级,CSS修改文字属性,CSS修改字体属性,CSS修改其他属性

    伪元素选择器 未使用元素选择器的效果 第一行:伪元素选择器:选择部分内容 第二行:伪元素选择器:选择部分内容 伪元素选择器:选择部分内容 伪元素选择器:选择部分内容 ::selection:选择指定元 ...

  6. javaweb开发案例

    1.实验3 (1)当运行Servlet时,碰到"空指针异常"错误怎么处理? 答:应提示用户操作有误,或设置对象值为空字符串或一个默认值,或是不执行某操作,直接跳转到其他处理中. ( ...

  7. 一些基本的jar包

    jackson与前端传送数据 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <arti ...

  8. 换个角度带你学C语言的基本数据类型

    摘要: C语言的基本数据类型,大家从学生时代就开始学习了,但是又有多少人会试图从底层的角度去学习呢?这篇文章会用一问一答的形式,慢慢解析相关的内容和困惑. 本文分享自华为云社区<从深入理解底层的 ...

  9. CabloyJS V3.2.0支持Socket IO

    CabloyJS v3.2.0引入了Socket IO,并且实现了统一的在线推送和离线推送机制 效果演示 1. IM 用户向系统发送一条消息,系统通过websocket在线通道向用户推送一条回复 2. ...

  10. pytorch基础常识