我在下面有此代码。忘记()和记住()的函数应该删除带有新标签的新帧和网格。步骤应类似于:
step 1: f1.grid_forget()
step 2: f1.grid()
step 3: Label(f1).grid()
这应该使整个前一个窗格及其以前的内容都被忘记,并为新框架及其内容铺平道路。
from tkinter import *
root = Tk()
f1=Frame(root)
f1.grid(column=0, row=0)
f2=Frame(root)
f2.grid(column=0, row=1)
def forget():
f1.grid_forget()
f1.grid(column=0, row=0)
lbl2 = Label(f1, text="Yes he's back").grid(column=0, row=0)
def remember():
f1.grid(column=0, row=0)
f1.grid(column=0, row=0)
lbl2 = Label(f1, text="Is he back?").grid(column=0, row=0)
b1 = Button(f2, text="Forget", command=forget).grid(column=0, row=0)
b2 = Button(f2, text="Remember", command=remember).grid(column=1, row=0)
root.mainloop()
答案 0 :(得分:1)
grid_forget
不会导致小部件被破坏。这只会导致它不映射到屏幕。由于您的forget
函数会创建新标签,但不会破坏旧标签,因此框架会随着每个新标签的不断扩展。
如果您希望销毁一个小部件,则必须对其调用destroy
或其祖先之一。在您的情况下,我猜您想首先执行f1.destroy()
而不是f1.grid_forget()
,因为您希望销毁其所有子级。确切地说您要做什么尚不清楚,另一种选择是仅销毁f1
的子级。