美文网首页
Python笔记 | tkinter 将json数据用treev

Python笔记 | tkinter 将json数据用treev

作者: WangLane | 来源:发表于2019-05-07 10:25 被阅读0次

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__))

相关文章

网友评论

      本文标题:Python笔记 | tkinter 将json数据用treev

      本文链接:https://www.haomeiwen.com/subject/rxvcoqtx.html