从QTreeWidget

时间:2016-02-02 22:39:54

标签: python qt dictionary qtreewidget

我已经设法从字典中正确创建了这个treewidget,但现在我想对它进行逆向工程,我想从这个qtreewidget创建一个字典。 我很失落如何做到这一点,看起来很直接,但我失败了。

想法是获取父项

for index in range(self.treeWidget.topLevelItemCount()):
        parent = self.treeWidget.topLevelItem(index)

从那里起,我需要以parent.childCount()递归遍历每个子级,如果childCount有效,则迭代子级。

但我不知道如何从中创建字典。 请有人帮帮我.. 理想情况下我得到这样的东西

"core.global_vars.arrunner_qmenu_object_name"
"core.global_vars.metadata_label"
"core.logger.console_verbosity"

或者在最好的情况下{"core:{"global_vars:{"arrunner_qmenu_object_name":None}}, ...}

enter image description here

更新

replaceJson是获取root父母的主要功能, 从那里我收集所有的孩子,并将他们添加到全球儿童名单。 之后,我从“root.child.child.child”生成一个字符串,我可以将其扩展为dict {"root":"{"child":...}}

然后回来替换Json我将字符串添加到配置中.. 可能有一种更简单的方法.. 任何帮助表示赞赏。

所以这就是我想出来的:

def children(self, parent):
    global children
    childCount = parent.childCount()
    if childCount:
        for index in range(childCount):
            self.children(parent.child(index))
    elif not parent.parent() and not parent.text(1):  # top levels without children
        children.append(parent)
    if parent.text(1):
        children.append(parent)

def generateString(self, treeItem):
    def getParent(item):
        if item.parent():
            global parents
            parents.append(str(item.parent().text(0)))
            getParent(item.parent())
    global parents
    parents = [str(treeItem.text(0))]
    getParent(treeItem)
    attribute, value = '.'.join(parents[::-1]), treeItem.text(1)
    return attribute, value

def _replaceJson(self):
    super(JsonEditor, self)._replaceJson()
    writeToFile(self.configFile, "{}")
    # Getting children
    global children
    children = []
    for index in range(self.treeWidget.topLevelItemCount()):
        parent = self.treeWidget.topLevelItem(index)
        self.children(parent)
    # Generating config string
    for child in children:
        attribute, value = self.generateString(child)
        self._addToConfig(attribute, value)
    self.log.info("Updated config file: {}".format(os.path.basename(self.configFile)))
    self.close()

0 个答案:

没有答案