Python筆記 | tkinter 將json數(shù)據(jù)用treeview展現(xiàn)

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__))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容