python tkinter treeview排序树 [英] python tkinter treeview sort tree

查看:93
本文介绍了python tkinter treeview排序树的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基于示例和亨利的帮助,我想出了以下代码来对 tkinter 树视图中的树进行排序,但它不起作用.我没有收到任何错误,但树没有排序.任何帮助表示赞赏.

def treeview_sort_column(tv, col, reverse):l = [(tv.set(k, col), k) for k in tv.get_children('')]l.sort(key=lambda t: int(t[0]), reverse=reverse)#^^^^^^^^^^^^^^^^^^^^^^^对于 enumerate(l) 中的索引 (val, k):tv.move(k, '', index)电视标题(列,command=lambda: treeview_sort_column(tv, col, not reverse))定义排序树():列 = ('#0',)对于列中的 col:tree.heading(col, text=col,command=lambda c=col: treeview_sort_column(tree, c, False))

解决方案

由于您只是将命令添加到 #0 列中,因此您不必将其放入循环中.

>

from tkinter import ttk将 tkinter 作为 tk 导入根 = tk.Tk()树 = ttk.Treeview(root,height=10)树.pack()def treeview_sort_column(tv, col, reverse):l = [(tv.item(k)["text"], k) for k in tv.get_children()] #显示列#0不能设置l.sort(key=lambda t: t[0], 反向=反向)对于 enumerate(l) 中的索引 (val, k):tv.move(k, '', index)tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse))tree.heading("#0", command=lambda : treeview_sort_column(tree, "#0", False))对于范围内的我(10):tree.insert("",0,text=i)root.mainloop()

based on examples and Henry's help I have come up with the following code to sort the tree in a tkinter treeview, but it does not work. I do not get any errors but the tree is not sorted. Any help is appreciated.

def treeview_sort_column(tv, col, reverse):
    l = [(tv.set(k, col), k) for k in tv.get_children('')]
    l.sort(key=lambda t: int(t[0]), reverse=reverse)
    #      ^^^^^^^^^^^^^^^^^^^^^^^

    for index, (val, k) in enumerate(l):
        tv.move(k, '', index)

    tv.heading(col,
               command=lambda: treeview_sort_column(tv, col, not reverse))


def SortTree():

    columns = ('#0',)

    for col in columns:
        tree.heading(col, text=col,
                         command=lambda c=col: treeview_sort_column(tree, c, False))

解决方案

Since you are just adding the command to column #0, you don't have to put it in a loop.

from tkinter import ttk
import tkinter as tk

root = tk.Tk()
tree = ttk.Treeview(root,height=10)
tree.pack()

def treeview_sort_column(tv, col, reverse):
    l = [(tv.item(k)["text"], k) for k in tv.get_children()] #Display column #0 cannot be set
    l.sort(key=lambda t: t[0], reverse=reverse)

    for index, (val, k) in enumerate(l):
        tv.move(k, '', index)

    tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse))

tree.heading("#0", command=lambda : treeview_sort_column(tree, "#0", False))

for i in range(10):
    tree.insert("",0,text=i)

root.mainloop()

这篇关于python tkinter treeview排序树的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆