按字母顺序对Tkinter TreeView列进行排序

时间:2020-07-01 09:40:25

标签: python tkinter

我有一个问题。我的树状视图中有排序功能,但它不是按字母顺序排序。在我是第二项输入小部件(e1)的情况下,如何更改将根据药物名称对列表进行排序的代码?下面的代码:

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("Medicine database")

def add():
    tree.insert("",END,values=("",e0.get(),e1.get(),e2.get()))

def sort():
    rows = [(tree.item(item,"values"), item) for item in tree.get_children('')]
    rows.sort()
    for index, (values, item) in enumerate(rows):
        tree.move(item,'',index)

e0 = Entry(root,width=15)
e0.grid(row=0,column=1,rowspan=1,sticky=W)
e1 = Entry(root,width=15)
e1.grid(row=0,column=1,rowspan=2,sticky=W)
e2 = Entry(root,width=15)
e2.grid(row=0,column=1,rowspan=3,sticky=W)
e3 = Entry(root,width=15)
e3.grid(row=1,column=1,rowspan=3,sticky=W)

btn1 = Button(root,text="add",width=10,command=add)
btn1.grid(row =1,column=0,padx=10,pady=10,rowspan=2)
btn2 = Button(root,text="sort",width=10,command=sort)
btn2.grid(row =2,column=0,padx=10,pady=10,rowspan=2)

#treeview
tree = ttk.Treeview(root,height=25)
tree["columns"]=("one","two","three","four")
tree.column("one",width=120)
tree.column("two",width=160)
tree.column("three",width=130)
tree.column("four",width=160)
tree.heading("one", text="Numer seryjny leku")
tree.heading("two", text="Nazwa Leku")
tree.heading("three", text="Ampułki/Tabletki")
tree.heading("four",text="Data ważności")
tree["show"]="headings"
tree.grid(row=0,column=2,rowspan=6,pady=20)

root.geometry("840x580")
root.mainloop()

1 个答案:

答案 0 :(得分:0)

我已更改您的功能addall_data包含e1的文本。 添加新元素时,它将比较all_data中的数据并获得插入索引。不确定效率。

大写字母和小写字母之间进行比较的关键是ascii。您可能需要进行一些更改。

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("Medicine database")

all_data = []


def add():
    index = next((index for index, item in enumerate(all_data.sort() or all_data) if e1.get().lower() <= item),(END, e1.get()))
    all_data.append(e1.get())
    tree.insert("", index, values=("", e0.get(), e1.get(), e2.get()))


e0 = Entry(root, width=15)
e0.grid(row=0, column=1, rowspan=1, sticky=W)
e1 = Entry(root, width=15)
e1.grid(row=0, column=1, rowspan=2, sticky=W)
e2 = Entry(root, width=15)
e2.grid(row=0, column=1, rowspan=3, sticky=W)
e3 = Entry(root, width=15)
e3.grid(row=1, column=1, rowspan=3, sticky=W)

btn1 = Button(root, text="add", width=10, command=add)
btn1.grid(row=1, column=0, padx=10, pady=10, rowspan=2)

# treeview
tree = ttk.Treeview(root, height=25)
tree["columns"] = ("one", "two", "three", "four")
tree.column("one", width=120)
tree.column("two", width=160)
tree.column("three", width=130)
tree.column("four", width=160)
tree.heading("one", text="Numer seryjny leku")
tree.heading("two", text="Nazwa Leku")
tree.heading("three", text="Ampułki/Tabletki")
tree.heading("four", text="Data ważności")
tree["show"] = "headings"
tree.grid(row=0, column=2, rowspan=6, pady=20)

root.geometry("840x580")
root.mainloop()

enter image description here

enter image description here