前
tkinter的確算是比較老了,不可以用json直接生成treeview。那么動手自己搞一個吧。目標(biāo)是類似這樣子的:

json格式化
語法
先看treeview 的相關(guān)基礎(chǔ), 這個網(wǎng)站里面就很不錯了。
treeview的基本例子
當(dāng)然, 也要結(jié)合一下官方的文檔
treeview官方文檔

官方文檔-treeview插入
可以看到,我們需要指定一個treeview的parent,即父節(jié)點, 以及一個index即插入位置。其他都是可選參數(shù)。當(dāng)然,我們要指定顯示的文本,即text。由于我們要建立的是一個樹狀控件。所以我們并不需要heading,也不需要各個列的值。
建立控件
tree = ttk.Treeview(self, height=28, show='tree')
填充tree
def populate_treeview(tree, parent, node):
"""
Populate tree view by given json object.
:param tree: treeview widget.
:param parent: parent node of treeview.
:param node: node should be a dict object.
:return:
"""
# 如果沒有父節(jié)點,建立一個父節(jié)點
if parent is None:
parent = tree.insert('', 'end', text='Json')
# 由于node一定是dict,直接迭代
for item in node:
value = node.get(item)
if isinstance(value, dict):
cur = tree.insert(parent, 'end', text=str(item), values=(str(value).replace("'", '"'), type(value).__name__))
populate_treeview(tree, cur, value)
elif isinstance(value, list):
cur = tree.insert(parent, 'end', text=item, values=(str(value).replace("'", '"'), type(value).__name__))
for each in value:
if isinstance(each, dict):
tmp = tree.insert(cur, 'end', text='{}')
populate_treeview(tree, tmp, each)
else:
tree.insert(cur, 'end', text=str(each), values=(str(value).replace("'", '"'), type(value).__name__))
elif isinstance(value, int) or isinstance(value, str) or isinstance(value, bool):
# tmp = str(item) + ':' + str(value)
tmp = str(item)
tree.insert(parent, 'end', text=tmp, values=(str(value).replace("'", '"'), type(value).__name__))