我正在使用Python 3和PyQt5构建一个应用程序,我必须从任何dict生成一个TreeView。 Treeview将包含包含由dict的值和密钥对组成的行的数据项。值应在UI中可编辑。现在,用这段代码很容易从dict生成项目:
def createTreeFromDict(self, data, parent, top=False):
if isinstance(data, dict):
for key, value in data.items():
if isinstance(value, dict):
node = TreeItem([key, ""], parent)
parent.appendChild(node)
self.createTreeFromDict(value, node)
elif isinstance(value, list):
node = TreeItem([key, ""], parent)
parent.appendChild(node)
self.createTreeFromDict(value, node)
else:
print(key)
print(value)
node = TreeItem([key, value], parent)
parent.appendChild(node)
if isinstance(data, list):
for index, value in enumerate(data):
if isinstance(value, dict):
node = TreeItem([index+1, ""], parent)
parent.appendChild(node)
self.createTreeFromDict(value, node)
elif isinstance(value, list):
node = TreeItem([index+1, ""], parent)
parent.appendChild(node)
self.createTreeFromDict(value, node)
else:
node = TreeItem(["juttu", value], parent)
parent.appendChild(node)
if top:
self.layoutChanged.emit()
但是,我正在考虑如何将它绑定到原始的多维dict,以便当用户编辑一个项的值时,它会更改原始dict中的值。问题是dict可以包含子序列和列表,所以我不能只将key存储到Item中,同时引用原始dict。
我想我可以通过原始字典进行递归搜索以找到正确的dict键值对,但首先我想知道是否可以执行以下操作:
当我在代码中创建项目时,你可以看到我如何传递新的TreeItem键和值:node = TreeItem([key, value], parent)
是否可以将原始字典中此特定键值对的引用/指针传递给TreeItem?因此,如果我编辑引用的值,它将更新原始字典中的值?或者换句话说我如何将mydict [“mykey”]作为一个引用原始对象的变量传递?