我已经设法从字典中正确创建了这个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}}, ...}
更新
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()