100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > python listbox排序_Python3.3.2 tkinter ttk TreeView percolumn排序只按最后一列排序?

python listbox排序_Python3.3.2 tkinter ttk TreeView percolumn排序只按最后一列排序?

时间:2023-12-18 16:39:08

相关推荐

python listbox排序_Python3.3.2 tkinter ttk TreeView percolumn排序只按最后一列排序?

我试图使用标题'command'标记来获得一个简单化的ttk TreeView表,并按列排序,但它似乎不能正常工作。我使用这个问题的答案来实现功能:Tk treeview column sort

我的代码:import tkinter as tk

from tkinter import ttk

def treeview_sort_column(tv, col, reverse):

print('sorting %s!' % col)

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

print('Moving Index:%r, Value:%r, k:%r' % (index, val, k))

tv.move(k, '', index)

# reverse sort next time

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

cols = ('name', 'path', 'time', 'pb')

root = tk.Tk()

root.geometry("700x500")

listbox = ttk.Treeview(root, columns=cols, show="headings")

for each in ('name', 'path', 'time','pb'):

listbox.heading(each,text=each.capitalize(),command=lambda: treeview_sort_column(listbox, each, False))

listbox.column( each, width=tk.font.Font().measure(each.title() ))

if not each == 'path':

listbox.column(each,stretch=False)

if not each == 'name':

listbox.column( each, anchor='center')

listbox.pack(expand=True, fill=tk.BOTH)

root.mainloop()

我遇到的问题是,每次我运行它时,它只按最后一列排序,而不是按您单击的列(通过treeview_sort_column函数中的print语句进行验证)。在结果窗口中单击任何列得到的输出:

^{pr2}$

如果我将for循环中每个命令的动态创建更改为显式创建,方法是在循环之后添加此命令,那么它将按预期工作(即每列自行排序)。在listbox.heading('name', command=lambda: treeview_sort_column(listbox, 'name', False))

listbox.heading('path', command=lambda: treeview_sort_column(listbox, 'path', False))

listbox.heading('time', command=lambda: treeview_sort_column(listbox, 'time', False))

listbox.heading('pb', command=lambda: treeview_sort_column(listbox, 'pb', False))

产生:sorting name!

sorting name!

sorting path!

sorting path!

sorting time!

sorting time!

sorting pb!

sorting pb!

显然这是一个非常简单的例子,我的最后一个应用程序实际上在列中插入了数据(也有更多的列),但是由于我甚至不能让这个简化版本工作,我不知所措。我的循环有什么问题导致lambda函数出错?在

我的系统:Windows 7,64位

Python 3.3.2

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。