首页 > 解决方案 > QTableWidgetIem,当我点击不同深度的不同孩子时如何获取TopLevel文本

问题描述

我有一个关于QTreeWidgetItems. 我尝试时,例如。有 5 个不同的分支子节点,然后单击底部(或最后一个)以获取topLevelItem. 我也明白了,但它的代码变得令人困惑。

所以我想问一下是否有topLevelItem比这段代码更温和的方法来获得:

    def treeItem(self):
        return self.treeWidget.selectedItems()[0]

    def writeJson(self, data, filename="langJson/jsonFile.json"):
        with open(filename, "r+") as f:
            filedata = json.load(f)
            #if data not in filedata:
            for x in range(2):
                try:
                    if self.treeItem().parent().parent().text(0) == self.treeWidget.topLevelItem(x).text(0) or \
                            self.treeItem().parent().parent().parent().text(0) == self.treeWidget.topLevelItem(x).text(0):

                        filedata[self.treeWidget.topLevelItem(x).text(0)].append(data)
                        f.seek(0)
                        json.dump(filedata, f, sort_keys=True,indent=4)
                except:
                    if self.treeItem().parent().text(0) == self.treeWidget.topLevelItem(x).text(0):
                        filedata[self.treeWidget.topLevelItem(x).text(0)].append(data)
                        f.seek(0)
                        json.dump(filedata, f, sort_keys=True, indent=4)

在此处输入图像描述

例如,我点击这张图片。并且想要gg显示 Python而不重复parent (). parent () ...

注意:我使用 Qt 设计器创建了程序,所以我没有发布所有代码。但如果有必要,我会编辑一些关于它的东西。

标签: pythonpyqt5pyside6

解决方案


树结构需要实现递归函数。

要获取子项的顶级项,请使用 while 循环获取父项,直到找到有效的父项:

    def topLevelParent(self, item):
        while item.parent():
            item = item.parent()
        return item

然后,您只需topLevelParent使用您获得的任何项目进行调用,并且将始终返回顶级,即使给定项目顶级项目。


推荐阅读