有没有办法在这篇文章python ttk treeview sort numbers中获得类似的结果,但没有按下标题?最好的方法是在插入一个项目后立即。
答案 0 :(得分:0)
要在每个新项目插入后对Treeview
进行排序,只需在代码中的正确位置添加对排序函数的显式调用。
示例代码:
import tkinter as tk
from tkinter import ttk
counter = 0
numbers = ['1', '10', '11', '2', '3', '4', '24', '12', '5']
def sort_treeview():
content = [(tv.set(child, column), child)
for child in tv.get_children('')]
try:
content.sort(key=lambda t: int(t[0]))
except:
content.sort()
for index, (val, child) in enumerate(content):
tv.move(child, '', index)
def add_item():
global counter
if counter < 8:
tv.insert('', 'end', values=numbers[counter])
counter += 1
# Sort the treeview after the new item was inserted
# -------------------------------------------------
sort_treeview()
root = tk.Tk()
column = 'number'
tv = ttk.Treeview(root, columns=column, show='headings')
tv.pack()
button = tk.Button(root, text='Add entry', command=add_item)
button.pack()
root.mainloop()
答案 1 :(得分:0)
如果每次插入新项目时都要对内容进行排序,那么一种更有效的方法是将项目插入正确的位置,而不是对每次插入的全部数据进行排序。
这是使用标准foo <- function(x, description={if(x>0) v <- "pos" else v <-"non-pos"; v}) {
cat(x, description, "\n")
}
模块实现此目标的一种方法,该模块的bisect
函数为您提供了应在bisect(a, x)
中插入x
以保持顺序的索引( a
被假定为已排序)。在下面的示例中:
a
中; GUI
,仅包含一列; self.tree
方法在树的某个类别下插入新行(由insert_item
指向),并且每个类别下的项目都必须在我的应用程序中单独排序,这就是为什么我只检索该类别的孩子。location