Tk树视图列排序

问题描述 投票:11回答:2

是否可以通过单击列来对Tk Treeview中的条目进行排序?令人惊讶的是,我找不到与此有关的任何文档/教程。

python sorting treeview tkinter
2个回答
20
投票

patthoyts中的[#tcl指出TreeView Tk演示程序具有排序功能。这是等效的Python:

def treeview_sort_column(tv, col, reverse):
    l = [(tv.set(k, col), k) for k in tv.get_children('')]
    l.sort(reverse=reverse)

    # rearrange items in sorted positions
    for index, (val, k) in enumerate(l):
        tv.move(k, '', index)

    # reverse sort next time
    tv.heading(col, command=lambda: \
               treeview_sort_column(tv, col, not reverse))

[...]
columns = ('name', 'age')
treeview = ttk.TreeView(root, columns=columns, show='headings')
for col in columns:
    treeview.heading(col, text=col, command=lambda: \
                     treeview_sort_column(treeview, col, False))
[...]

13
投票

这在python3中不起作用。由于变量是通过引用传递的,因此所有的lambda最终都引用了列中的最后一个元素。

这帮了我大忙:

for col in columns:
    treeview.heading(col, text=col, command=lambda _col=col: \
                     treeview_sort_column(treeview, _col, False))

0
投票

我在我的一个项目中使用了此代码,并且有效!!但是有人可以向我详细解释此代码吗?会有很大的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.