Tix HList Сортировать по столбцу, если щелкнуть заголовок - PullRequest
0 голосов
/ 26 августа 2018

Amateur Scripting здесь чисто как побочное хобби, но функционирует для улучшения трудовой жизни.Я создаю функцию профиля загрузки как часть графического интерфейса.Я ограничен 2.4, где ttk не существует без видения обновления языковой версии.Я возился с Тиксом, и у меня есть последнее, что нужно написать.Мне нужно сгенерировать функцию сортировки по столбцам, но я не могу понять, как (по алфавиту или по возрастанию).

Есть виджет записи, который обновляет список выбора на основе переменной поиска.

У меня есть приложение, читающее CSV-файл, который выглядит следующим образом:

Peter,Griffin,Safety Inspector,Toys,3B,238-4945
Homer,Simpson,Safety Inspector,Nuclear,41A,256-8764
Philip,Fry,Pilot/Delivery Boy,Intergalactic Deliveries,14D,432-5983
Sterling,Archer,Spy,Intelligence,101G,123-1234
Rick,Sanchez,Genius Scientist,Science,Garage,None

Python 2.4 Tix HList код

from Tkinter import *
import Tix
import csv

TCL_ALL_EVENTS = 0

def Run(root):
    shlist = Application(root)
    shlist.mainloop()
    shlist.destroy()

class Application:
    def __init__(self, w):
        self.root = w
        self.exit = -1

        z = w.winfo_toplevel()
        z.wm_protocol('WM_DELETE_WINDOW', lambda self=self: self.quitcmd())

        top = Tix.Frame( w, relief=Tix.RAISED, bd=1)
        top.pack()

        self.search_var = StringVar()
        self.search_var.trace('w', lambda name, index, mode: self.update_list())
        self.entry = Entry(top, textvariable = self.search_var, width=13)
        self.entry.pack(expand=1, fill=Tix.BOTH, padx=10, pady=10)
        self.dataCols = ('First','Last','Position','Department','Office','Phone Number')

        top.a = Tix.ScrolledHList(top, options='hlist.columns 6 hlist.header 1' )
        top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10)

        box = Tix.ButtonBox(top, orientation=Tix.HORIZONTAL)
        box.add('ok', text='Ok', underline=0, width=6,
            command=self.okcmd)

        box.add('cancel', text='Cancel', underline=0, width=6,
            command=self.quitcmd)

        box.pack(side=Tix.BOTTOM, fill=Tix.X)
        top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)

        self.hlist=top.a.hlist

        boldfont=self.hlist.tk.call('tix','option','get','bold_font')

        self.style={}
        self.style['header'] = Tix.DisplayStyle(Tix.TEXT, refwindow=self.hlist,
        anchor=Tix.CENTER, padx=8, pady=2, font = boldfont )
        self.style['style1'] = Tix.DisplayStyle(Tix.TEXT, refwindow=self.hlist)


        num = 0
        for c in self.dataCols:
            self.hlist.header_create(num, itemtype=Tix.TEXT, text=c, style=self.style['header'])
            num += 1
        self.hlist.config(width=25, drawbranch=0, indent=10)

        self.update_list()

    def update_list(self):
        self.hlist.delete_all()

        search_term = self.search_var.get()
        file = open('DB.csv', 'r')
        lbox_list = []
        for row in file:
            lbox_list.append(row.split(','))

        refresh = []
        for item in lbox_list:
            if search_term.upper() in ''.join(item).upper():
                refresh.append(item)


        i = 0
        for first, last, position, department, office, phonenumber in refresh:
            self.hlist.add(i, itemtype=Tix.TEXT, text=first, style=self.style['style1'])
            self.hlist.item_create(i, 1, itemtype=Tix.TEXT, text=last, style=self.style['style1'])
            self.hlist.item_create(i, 2, itemtype=Tix.TEXT, text=position, style=self.style['style1'])
            self.hlist.item_create(i, 3, itemtype=Tix.TEXT, text=department, style=self.style['style1'])
            self.hlist.item_create(i, 4, itemtype=Tix.TEXT, text=office, style=self.style['style1'])
            self.hlist.item_create(i, 5, itemtype=Tix.TEXT, text=phonenumber.strip(), style=self.style['style1'])
            i += 1



    def okcmd (self):
        self.quitcmd()

    def quitcmd (self):
        self.exit = 0

    def mainloop(self):
        while self.exit < 0:
            self.root.tk.dooneevent(TCL_ALL_EVENTS)

    def destroy (self):
        self.root.destroy()


if __name__== '__main__' :
    root=Tix.Tk()
    root.geometry('600x300')
    Run(root)
...