如何关闭以前的帧并在以后的Tkinter中重用它们

时间:2018-10-23 11:55:00

标签: python-3.x tkinter grid

我在下面有此代码。忘记()和记住()的函数应该删除带有新标签的新帧和网格。步骤应类似于:

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()

1 个答案:

答案 0 :(得分:1)

grid_forget不会导致小部件被破坏。这只会导致它不映射到屏幕。由于您的forget函数会创建新标签,但不会破坏旧标签,因此框架会随着每个新标签的不断扩展。

如果您希望销毁一个小部件,则必须对其调用destroy或其祖先之一。在您的情况下,我猜您想首先执行f1.destroy()而不是f1.grid_forget(),因为您希望销毁其所有子级。确切地说您要做什么尚不清楚,另一种选择是仅销毁f1的子级。