1 回答

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
當(dāng)一排框架中的頂部小部件(框架)被制作 255 次時(shí)它會(huì)崩潰。我想這與它如何以字節(jié)為單位存儲(chǔ)信息有關(guān)。
不,這與此無關(guān)。我認(rèn)為您關(guān)于程序在數(shù)字達(dá)到 255時(shí)崩潰的斷言可能是錯(cuò)誤的。很容易創(chuàng)建一個(gè) tkinter 程序,即使這個(gè)數(shù)字達(dá)到數(shù)千,它也能繼續(xù)工作。如果您查看 tkinter 源代碼,您會(huì)發(fā)現(xiàn)它只是一個(gè)附加到字符串的普通整數(shù)。
您似乎誤解了list變量與存儲(chǔ)在其中的小部件之間的關(guān)系。清除列表不會(huì)破壞列表中的小部件。您必須單獨(dú)刪除每一個(gè),或者銷毀它們的父級。在這種情況下,它們的父窗口是根窗口,因此這不是一個(gè)可行的解決方案。
如果要銷毀所有幀,請?jiān)谇宄斜碇笆褂靡粋€(gè)小循環(huán):
for frame in list:
frame.destroy()
tkinter 分配給小部件的數(shù)字無關(guān)緊要。數(shù)字是多少并不重要,它可能反映也可能不反映實(shí)際存在的小部件數(shù)量。這是一個(gè)不重要的內(nèi)部細(xì)節(jié)。
如果要查看實(shí)際存在多少個(gè)小部件,可以winfo_children在根窗口上調(diào)用。為此,您需要對根窗口的引用。最簡單和最好的方法是在代碼的開頭顯式創(chuàng)建根窗口:
root = Tk()
在腳本結(jié)束時(shí),您可以打印出實(shí)際存在的所有窗口:
print("all windows:", root.winfo_children())
在您的示例代碼中,它正好顯示了兩個(gè)小部件,這是預(yù)期的。您創(chuàng)建一個(gè)小部件,然后創(chuàng)建第二個(gè)小部件,然后刪除第一個(gè)小部件,然后創(chuàng)建第三個(gè)小部件。
添加回答
舉報(bào)