繁体   English   中英

python tkinter treeview排序树

[英]python tkinter treeview sort tree

基于示例和亨利的帮助,我想出了以下代码来对 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)
    #      ^^^^^^^^^^^^^^^^^^^^^^^

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

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

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

因为我想在单击特定列标题时按字母顺序按列值排序,所以我在@Henry Yik的回答中添加了该功能,并希望将来为有相同问题的人发帖。

def treeview_sort_column(tv, col, reverse):
    column_index = self.tree["columns"].index(col)
    l = [(str(tv.item(k)["values"][column_index]), k) for k in tv.get_children()]
    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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM