• Как добавить сортировку столбцов по возрастанию и убыванию в treeview?

    NeiroNx
    @NeiroNx
    Программист
    Зачем меню делать? это же неудобно, не надо делать так как ненадо - сделай как все везде привыкли при клике по колонке:
    первый клик по колонке по возрастанию второй по убыванию ["^","v"] индикаторы сортировки
    ####
            rev = {"#%d"%x:False for x in range(1,8)}
            def treeview_sort_column(tv, col):
                l = [(tv.set(k, col), k) for k in tv.get_children('')]
                l.sort(reverse=rev[col])
                for k in rev.keys():
                    tv.heading(k,text=tv.heading(k,"text").replace("v","").replace("^",""))
                tv.heading(col,text=["^","v"][rev[col]]+tv.heading(col,"text"))
                rev[col]=not rev[col]
                for index, (val, k) in enumerate(l):
                    tv.move(k, '', index)
    
            tree.place()
            tree.heading("#1", text="  Код", command=lambda:treeview_sort_column(tree,"#1"))
            tree.column("#1", minwidth=0, width=35)
            tree.heading("#2", text="  Фамилия", command=lambda:treeview_sort_column(tree,"#2"))
            tree.heading("#3", text="  Имя", command=lambda:treeview_sort_column(tree,"#3"))
            tree.heading("#4", text="  Отчество", command=lambda:treeview_sort_column(tree,"#4"))
            tree.heading("#5", text="  Год", command=lambda:treeview_sort_column(tree,"#5"))
            tree.column("#5", minwidth=0, width=90)
            tree.heading("#6", text="  Школа", command=lambda:treeview_sort_column(tree,"#6"))
            tree.column("#6", minwidth=0, width=50)
            tree.heading("#7", text="  Класс", command=lambda:treeview_sort_column(tree,"#7"))
    ####

    можно конечно и значек выводить в заголовке, но это так муторно писать)))
    Ответ написан
    1 комментарий