2
我有一個要做的任務列表。該列表有幾個子組,我想一起顯示。爲此,我爲每個子組創建了一個框架,並使用grid()在相應的框架中顯示每個任務。一旦任務完成,我就銷燬相應的標籤。爲什麼一個框架在清空時保持非空的大小?
當一個子組從一開始就是空的時候,tkinter將該幀的大小減小到0,而我沒有看到它。但是,當有任務的子組變爲空時,它似乎具有最小尺寸並且不會消失。有沒有辦法阻止?
這是我的問題的一個例子:frame0沒有出現,因爲它是空的(這很好)。但即使銷燬了frame1的標籤(使用按鈕),frame1也會因某種原因保留一行。
import tkinter as tk
window=tk.Tk()
frame0=tk.Frame(window,bg='green')
frame1=tk.Frame(window,bg='red')
frame2=tk.Frame(window,bg='blue')
window.grid_columnconfigure(0,weight=1)
frame0.grid(sticky='ew')
frame1.grid(sticky='ew')
frame2.grid(sticky='ew')
labelList1=[]
for i in range(2):
labelList1.append(tk.Label(frame1,text='Task type 1'))
labelList1[-1].grid(sticky='ew',pady=5)
tk.Label(frame2,text='Task type 2: 1').grid(sticky='ew',pady=5)
tk.Label(frame2,text='Task type 2: 2').grid(sticky='ew',pady=5)
for i in range(2):
tk.Button(window,text='Destroy {}'.format(i),command=labelList1[i].destroy).grid()
window.mainloop()
我已經找到辦法解決它僅使用一個框架,並使用行1到100的分組0,101到200到子組1,等等,但我不覺得這是優雅的。
與lambda函數很好的把戲。我在lambda函數中從未見過默認參數。我使用partial()代替。 – Florent
@Florent:這是一個非常標準的技巧,它比使用「partial」更高效。它的工作原理是因爲args的默認值是在創建函數時設置的(無論是「def」還是「lambda」)。 –