2009-12-27 3 views
8

Gibt es eine Möglichkeit, die Einträge in einem Tk Treeview durch Klicken auf die Spalte zu sortieren? Überraschenderweise konnte ich dazu keine Dokumentation/Tutorial finden.Tk Treeview Spalte Sortierung

+0

Zusammen mit #tcl sind auch andere apt Ressourcen für Tkinter Forschung der Tkinter-Mailingliste und Wiki. –

Antwort

19

patthoyts von #tcl wies darauf hin, dass das TreeView Tk Demo-Programm die Sortierfunktionalität hatte. Hier ist das Python-Äquivalent dazu:

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

Dies funktionierte nicht in python3. Da die Variable als Referenz übergeben wurde, bezogen sich alle Lambdas auf das gleiche letzte Element in den Spalten.

Diese den Trick für mich getan hat:

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