PySide6/PyQt开发经验总结(1) - QTreeWidget折叠子项(折叠当前项的所有子项)
QTreeWidget折叠子项(折叠当前项的所有子项)
本文仅供本人知识总结使用,所以内容会比较浅显,不喜勿喷。
[TOC]#
一、仅折叠子项#
首先 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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码