我有一个这样的嵌套字典,我想用它来填充层次树视图。
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()
答案 0 :(得分:0)
我知道了:
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")
def add_node(k, v):
for i, j in v.items():
tree.insert(k, 1, i, text=i)
if isinstance(j, dict):
add_node(i, j)
for k, v in hierarchy.items():
tree.insert("", 1, k, text=k)
add_node(k, v)
tree.pack(expand=True, fill='both')
root.mainloop()