Tk树视图列

2024-03-28 20:13:26 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法通过单击列对Tk Treeview中的条目进行排序?令人惊讶的是,我找不到任何文档/教程。


Tags: 文档排序条目教程tktreeview办法
2条回答

来自#tclpatthoyts指出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))
[...]

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

这对我有好处:

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

相关问题 更多 >