2009-12-27 20 views
8

¿Hay alguna manera de ordenar las entradas en un Tk Treeview haciendo clic en la columna? Sorprendentemente, no pude encontrar ninguna documentación/tutorial para esto.Columna Tk treeview ordenar

+0

Junto con #tcl, otros recursos aptos para la investigación son Tkinter la lista de correo Tkinter y Wiki. –

Respuesta

19

patthoyts de #tcl señaló que el programa de demostración TreeView Tk tenía la funcionalidad de ordenación. Aquí está el equivalente de 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

Esto no funcionó en python3. Como la variable se pasó por referencia, todas las lambdas terminaron refiriéndose al mismo elemento, el último, en las columnas.

Esto hizo el truco para mí:

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