Как реализовать сортировку в БД?

Есть программа на Tkinter с Treeview. Надо реализовать вывод отсортированных данных из БД SQLite по нажатию на заголовок столбца Treeview. Как можно это реализовать и вообще возможно ли такое на Tkinter?

Пример Treeview

import tkinter as tk
from tkinter import ttk


root = tk.Tk()
note = ttk.Notebook(root)
frame = tk.Frame(root)
tree1 = ttk.Treeview(frame)
columns = ("one","two","three")
tree1["columns"]= columns
tree1.column("#0", width=270, minwidth=270, stretch=tk.NO)
tree1.column("one", width=150, minwidth=150, stretch=tk.NO)
tree1.column("two", width=400, minwidth=200)
tree1.column("three", width=80, minwidth=50, stretch=tk.NO)
tree1.pack()

frame2 = tk.Frame(root)
tree2 = ttk.Treeview(frame2)
tree2["columns"]= columns
tree2.column("#0", width=270, minwidth=270, stretch=tk.NO)
tree2.column("one", width=150, minwidth=150, stretch=tk.NO)
tree2.column("two", width=400, minwidth=200)
tree2.column("three", width=80, minwidth=50, stretch=tk.NO)
tree2.heading("#0",text="Name",anchor=tk.W)
tree2.heading("one", text="Date modified",anchor=tk.W)
tree2.heading("two", text="Type",anchor=tk.W)
tree2.heading("three", text="Size",anchor=tk.W)
tree2.pack()

columns = ('#0', "one","two","three")

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


tree1.heading("#0",text="Name",anchor=tk.W)
tree1.heading("one", text="Date modified",anchor=tk.W)
tree1.heading("two", text="Type",anchor=tk.W)
tree1.heading("three", text="Size",anchor=tk.W)

tree1.insert('', tk.END, text='2', values=('3','1','2'))
tree1.insert('', tk.END, text='1', values=('2','3','1'))
tree1.insert('', tk.END, text='3', values=('1','2','3'))

note.add(frame, text="page1")
note.add(frame2, text="page2")

note.pack()

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

root.mainloop()

Ответы (1 шт):

Автор решения: gil9red

Пример сортировки:

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()
→ Ссылка