如何删除 QTreeWidgetItem 的子项
Posted
技术标签:
【中文标题】如何删除 QTreeWidgetItem 的子项【英文标题】:How to remove children of QTreeWidgetItem 【发布时间】:2016-06-29 11:55:39 【问题描述】:。有时它会删除所有项目,有时则不会。
如何正确删除子项。
这是我执行删除子项并添加新子项的函数
def update_children_cont(self,subDirs,parent):
new_dir = subDirs
for i in range(parent.childCount()):
parent.removeChild(parent.child(i))
print "child count should be 0",parent.childCount()
parent.addChildren(self.tree_list_generator(new_dir))
在QWidgetItem.removeChild
的文档中
删除由 child 指示的给定项目。 已移除的项目不会被删除。
removed item will not be deleted
是什么意思
【问题讨论】:
【参考方案1】:您的示例不起作用,因为您在迭代它们时试图删除它们。移除每个项目后,其他项目将向下移动。所以一旦过了中途点,循环就会开始给出无效的索引。
您可以通过以逆序移除项目来轻松解决此问题。这样,在删除每个项目后,其他项目将保留在原处,并且所有索引都将保持有效:
for i in reversed(range(parent.childCount())):
parent.removeChild(parent.child(i))
至于您关于文档的其他问题:
removeChild
方法会移除传入的项目,但由调用者为其释放内存。当然,python 垃圾收集器通常会为您执行此操作,因此文档的这一方面与 C++ 用户更相关。
【讨论】:
其实我现在觉得很傻,不知道为什么我没想到 其实每次for i in range(parent.childCount): parent.removeChild(parent.child(0))
都可以去掉第一个,因为下一个会向上移动,所以不需要反转。以上是关于如何删除 QTreeWidgetItem 的子项的主要内容,如果未能解决你的问题,请参考以下文章
QTreeWidgetItem 不显示默认三角形 && 自定义TreeWidgetItem的widget && 子项Item与顶层TopLevelItem顶端对其-
索引 0 处的 QTreeWidgetItem.insertChild