Как закрыть предыдущие кадры и использовать их позже в tkinter - PullRequest
0 голосов
/ 23 октября 2018

У меня есть этот код ниже.функции at забудьте () и запомнить () должны удалить предыдущий фрейм и сетку в новый с новой меткой.шаги должны идти примерно так:

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 голосов
/ 24 октября 2018

grid_forget не приводит к уничтожению виджета.Это только приводит к тому, что он не отображается на экране.Поскольку ваша функция forget создает новые метки, но никогда не уничтожает старые метки, ваш фрейм будет расширяться с каждой новой меткой.

Если вы хотите, чтобы виджет был уничтожен, вы должны вызвать на нем destroy илиодин из его предков.В вашем случае я предполагаю, что вы хотите сначала сделать f1.destroy(), а не f1.grid_forget(), поскольку вы хотите, чтобы все его дети были уничтожены.Немного неясно, что именно вы хотите сделать, другой вариант - уничтожить только детей f1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...