C'è un modo per ordinare le voci in un Tk Treeview facendo clic sulla colonna? Sorprendentemente, non ho trovato alcuna documentazione/tutorial per questo.Tk colonna treeview sort
8
A
risposta
19
patthoyts da #tcl
ha sottolineato che il programma dimostrativo TreeView Tk aveva la funzionalità di ordinamento. Ecco l'equivalente di Python:
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))
[...]
columns = ('name', 'age')
treeview = ttk.TreeView(root, columns=columns, show='headings')
for col in columns:
treeview.heading(col, text=col, command=lambda: \
treeview_sort_column(treeview, col, False))
[...]
8
Questo non ha funzionato in python3. Poiché la variabile è stata passata per riferimento, tutti i lambda finivano per riferirsi allo stesso, ultimo, elemento in colonne.
Questo ha fatto il trucco per me:
for col in columns:
treeview.heading(col, text=col, command=lambda _col=col: \
treeview_sort_column(treeview, _col, False))
Insieme con #tcl, altre risorse per la ricerca apt Tkinter sono sulla lista Tkinter e Wiki. –