Вы можете создать функцию, которая создаст Frame
и поместит виджеты в этот кадр.И тогда вы можете поместить рамку в окно.
Когда вы нажимаете кнопку, вы можете destroy()
этот кадр удалить все виджеты, и вы можете запустить ту же функцию, чтобы снова создавать виджеты.Или вы можете запустить другую функцию для создания другого фрейма с виджетами - так что вы можете заменить содержимое в окне.
from tkinter import *
# --- functions ---
def create_frame(master):
print("create frame")
frame = Frame(master)
b = Button(frame, text='Do Something')
b.pack(pady=10)
clearall = Button(frame, text='reset', command=reset_all)
clearall.pack(pady=10)
return frame
def reset_all():
global frame
frame.destroy()
frame = create_frame(master)
#frame = create_different_frame(master)
frame.pack()
# --- main ---
master = Tk()
frame = create_frame(master)
frame.pack()
mainloop()
Кстати: если вы делаете var = Widget().pack()
, тогда вы назначаете None
на var
, и у вас нет доступа к виджету - т.е.Вы не можете разрушить это.Вы должны сделать это в два шага
var = Widget()
var.pack()
, если вам не нужен доступ к виджету, тогда вам не нужна переменная
Widget().pack()
И когда у вас есть доступ ко всем виджетамзатем вы можете изменить настройки (т. е. открытый текст) в каждом виджете вместо того, чтобы уничтожать все виджеты.