【发布时间】:2019-11-23 23:08:42
【问题描述】:
我有一个像这样的嵌套字典,我想用它来填充分层树视图。
hierarchy = {
'a': {
'b': {
'e': 'DATA',
'f': 'DATA',
'g': {
'h': 'DATA',
'i': 'DATA',
'j': 'DATA'
},
'm': {
'n': 'DATA',
'o': 'DATA',
'p': 'DATA'
}
},
'c': 'DATA',
'd': 'DATA'
}
}
代码应该遍历嵌套字典并创建适当的 tk 树视图节点。基本上是复制 PyCharm 的视图,让您可以打开嵌套字典并根据需要向下钻取。
我正在粘贴我在下面编写的代码,但递归根本不起作用。我只是为了方便而不必重新创建 tk 窗口等而粘贴它。
root = tk.Tk()
root.geometry("900x900")
tree = ttk.Treeview(root)
ttk.Style().configure('Treeview', rowheight=30)
tree["columns"] = ("one", "two", 'three')
tree.column("one", width=100)
tree.column("two", width=100)
tree.heading("one", text="a")
tree.heading("two", text="b")
tree.heading("three", text="c")
nodes = {}
def add_node(elem):
for i, j in elem.items():
if isinstance(j, dict):
add_node(j)
else:
if i in nodes.keys():
nodes[j] = tree.insert(i, 1, j, text=j)
else:
nodes[i] = tree.insert("", 1, i, text=i)
for k, v in hierarchy.items():
add_node(k)
tree.pack(expand=True, fill='both')
root.mainloop()
root.destroy()
【问题讨论】:
-
不相关:使用
i in nodes代替 - O(1) 而不是 O(n) 和keys()。 -
这很奇怪,但谢谢我不知道。
标签: python recursion tkinter nested treeview