2009-12-27 18 views
8

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

+0

Insieme con #tcl, altre risorse per la ricerca apt Tkinter sono sulla lista Tkinter e Wiki. –

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