Tix HList Сортировать по столбцу, если щелкнуть заголовок левой кнопкой мыши
Сценаристы-любители здесь просто как побочное хобби, но функции для улучшения трудовой жизни. Я создаю функцию профиля загрузки как часть графического интерфейса. Я ограничен 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)