Python笔记 | tkinter 将json数据用treeview展现

tkinter的确算是比较老了,不可以用json直接生成treeview。那么动手自己搞一个吧。目标是类似这样子的:


json格式化

语法

先看treeview 的相关基础, 这个网站里面就很不错了。
treeview的基本例子
当然, 也要结合一下官方的文档
treeview官方文档

官方文档-treeview插入

可以看到,我们需要指定一个treeview的parent,即父节点, 以及一个index即插入位置。其他都是可选参数。当然,我们要指定显示的文本,即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:
    """
    # 如果没有父节点,建立一个父节点
    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__))
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容