Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从QTreeWidget中删除非顶级项_Python_Pyside_Qtreewidget - Fatal编程技术网

Python 从QTreeWidget中删除非顶级项

Python 从QTreeWidget中删除非顶级项,python,pyside,qtreewidget,Python,Pyside,Qtreewidget,在文档中,我看到可以使用takeTopLevelItem从QTreeWidget删除顶级项。但是,我需要删除非顶级的项目。我完全不知道该怎么做,所以我求助于这里。我做的任何谷歌搜索最终都没有正确的结果,PySide文档完全没有帮助。我怀疑有一种简单的方法可以做到这一点,我想得太多了,但我不知道如何找到它。好吧,在考虑了三天之后,我意识到答案,正如我所怀疑的,相当简单,但可能有点复杂 我试图删除该项目时,右键单击了QTreeWidget,只需一点背景,您就可以理解我的代码 tree = QTree

在文档中,我看到可以使用takeTopLevelItem从QTreeWidget删除顶级项。但是,我需要删除非顶级的项目。我完全不知道该怎么做,所以我求助于这里。我做的任何谷歌搜索最终都没有正确的结果,PySide文档完全没有帮助。我怀疑有一种简单的方法可以做到这一点,我想得太多了,但我不知道如何找到它。

好吧,在考虑了三天之后,我意识到答案,正如我所怀疑的,相当简单,但可能有点复杂

我试图删除该项目时,右键单击了QTreeWidget,只需一点背景,您就可以理解我的代码

tree = QTreeWidget()

def delItem(e):
    if e.reason() == QContextMenuEvent.Mouse:
        itemClicked = tree.itemAt(e.pos())
        for topItem in range(0,tree.topLevelItemCount()):
            topItem = tree.topLevelItem(topItem)
            if topItem.isSelected():
                tree.takeTopLevelItem(tree.indexOfTopLevelItem(topItem))
            else:
                def checkChildren(item):
                    if item.childCount() >= 0:
                        for childItem in range(0,item.childCount()):
                            childItem = item.child(childItem)
                            if childItem.isSelected():
                                item.removeChild(childItem)
                            else:
                                childItem.checkChildren()
                checkChildren(topItem)

tree.contextMenuEvent = delItem