我正在嘗試創建一個 GUI,其中左側是一個Listbox(包含在框架內f2),顯示員工 ID,右側是另一個框架second_frame(包含在畫布和外部框架內f3),以標簽的形式顯示每個選定員工的交易詳細信息。每個員工可以有多個交易。因此,標簽的數量必須是動態的,即對于 中的第一個選定的項目listbox,可以有兩個標簽,對于 中的第二個選定的項目listbox,可以有一百個。對于每個選擇,我都會調用兩個函數來銷毀舊標簽并創建新標簽。雖然代碼工作正常,但我無法根據所選listbox條目調整滾動條的大小。我是 Tkinter 的新手,請指教。下面是我的代碼。另請注意,從任何函數外部調用 test() 函數時都會顯示滾動條,但從任何函數內部調用時不會顯示任何內容。# -*- coding: utf-8 -*-from tkinter import *'''def test(): for i in range(0,50): for j in range (0,7): Label(second_frame, text=f'{i}{j}', width=20).grid(row=i, column=j, pady=5,padx=5)'''# --- function ---def destroy_frame(): #f1.grid_forget() print("destroying frame") for label in second_frame.winfo_children(): label.destroy()def create_frame(val): print("creating new frame") for i in range(0,val): for j in range (5): Label(second_frame, text=f'{i} {j} ', relief=GROOVE, width=10).grid(row=i, column=j, pady=5,padx=5)def on_selection(event): # here you can get selected element print('previous:', listbox.get('active')) print(' current:', listbox.get(listbox.curselection())) # or using `event` print('(event) previous:', event.widget.get('active')) print('(event) current:', event.widget.get(event.widget.curselection())) print (listbox.get(listbox.curselection())) if (listbox.get(listbox.curselection()) == "Eid 1"): destroy_frame() create_frame(100) elif (listbox.get(listbox.curselection()) == "Eid 2"): destroy_frame() create_frame(200) print('---')root = Tk()root.geometry('800x500')#Create base Framesf1 = Frame(width=800, height=50, bg="yellow", colormap="new")f1.grid(row=0, columnspan=2)f1.grid_propagate(False)f2 = Frame(width=200, height=425, bg="light blue", colormap="new")f2.grid(row=1, column=0)f2.grid_propagate(False)
1 回答

元芳怎么了
TA貢獻1798條經驗 獲得超7個贊
當您將小部件添加到框架時,您的畫布不會觸發配置事件。相反,你的框架被觸發了。
所以你需要添加這一行:
second_frame.bind('<Configure>', lambda e : my_canvas.configure(scrollregion = my_canvas.bbox("all")))
創建后second_frame
添加回答
舉報
0/150
提交
取消