Я почти уверен, что в вставленной ссылке уже был ответ, но сортировка кажется неупорядоченной, если столбец для сортировки - это числа. Вот как это правильно отсортировать.
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
class MyTree(ttk.Treeview):
def __init__(self,master,**kw):
ttk.Treeview.__init__(self,master,**kw)
header = ("ID", "Column 2","Column 3")
width = (100,100,100)
self["columns"] = header
for i in range(len(header)):
self.column(header[i], width=width[i], anchor="w")
self.heading(header[i], text=header[i], anchor='w')
self.heading("ID", text="ID", command=lambda _col="ID": self.tree_sort(self, _col, False))
def tree_sort(self, tv, col, reverse):
l = [(int(tv.set(k, col)), k) for k in tv.get_children('')]
l.sort(reverse=reverse)
for index, (val, k) in enumerate(l):
tv.move(k, '', index)
tv.heading(col, command=lambda: self.tree_sort(tv, col, not reverse))
tree = MyTree(root,height=20)
tree.pack()
for i in range(50):
tree.insert("",0,text=f"Test{i}",values=(i,f"Test String {i}",f"Amount {i}"))
root.mainloop()