Я хотел создать Multilistbox, используя grid_columnconfigure & grid_rowconfigure. У меня есть следующий код, и он не работает, когда я максимизирую окно, потому что я не знаю, как я могу установить columnconfigure и rowconfigure в Multilistbox.
Мой код работает так, когда я максимизирую окно: Рабочий код
Мой прогноз такой, когда я максимизирую окно: Ожидаемый результат, когда я будуразвернуть окно Мой код здесь:
from Tkinter import *
class MultiListbox(Frame):
def __init__(self, master, lists):
Frame.__init__(self, master)
self.lists = []
Label(self,text="Product Name",borderwidth=1,
relief=RAISED).grid(row=0,column=0,columnspan=6,sticky=N + S + E + W)
Label(self,text="Product Name",borderwidth=1,
relief=RAISED).grid(row=1,column=0,columnspan=1,sticky=N + S + E + W)
Label(self,text="Product Name",borderwidth=1,
relief=RAISED).grid(row=1,column=1,columnspan=3,sticky=N + S + E + W)
Label(self,text="Product Name",borderwidth=1,
relief=RAISED).grid(row=1,column=4,columnspan=2,sticky=N + S + E + W)
for num, (l, w) in enumerate(lists):
frame = Frame(self)
frame.grid(row=2,column=num)
Label(frame, text=l, borderwidth=1, relief=RAISED).grid(row=0,column=0,sticky=N + S + E + W)
lb = Listbox(frame, width=w, borderwidth=0, selectborderwidth=0,
relief=FLAT, exportselection=FALSE)
lb.grid(row=1,column=0)
self.lists.append(lb)
lb.bind('<B1-Motion>', lambda e, s=self: s._select(e.y))
lb.bind('<Button-1>', lambda e, s=self: s._select(e.y))
lb.bind('<Leave>', lambda e: 'break')
lb.bind('<B2-Motion>', lambda e, s=self: s._b2motion(e.x, e.y))
lb.bind('<Button-2>', lambda e, s=self: s._button2(e.x, e.y))
Label(self, borderwidth=1, relief=RAISED, text=" ").grid(row=0,column=7,sticky=N + S + E + W,rowspan=3)
sb = Scrollbar(self, orient=VERTICAL)
sb.grid(row=2,column=7,sticky="ns")
self.lists[0]['yscrollcommand'] = sb.set
if __name__ == '__main__':
tk = Tk()
Label(tk, text='MultiListbox').pack()
mlb = MultiListbox(tk, (('Quantity', 20), ('Price', 20), ('Quantity', 20), ('Price', 20),('Quantity', 20), ('Price', 20),))
mlb.pack(expand=YES, fill=BOTH)
tk.mainloop()