[英]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.