Я пытаюсь очистить окно tkinter, однако мне нужен способ очистить все окно сразу, без использования pack.forget.
Любая помощь оценили.
3 ответа
Вы можете использовать простой рекурсивный цикл для вывода списка всех дочерних виджетов вашего главного окна:
def all_children (window) :
_list = window.winfo_children()
for item in _list :
if item.winfo_children() :
_list.extend(item.winfo_children())
return _list
Тогда просто используйте этот список:
widget_list = all_children(window)
for item in widget_list:
item.pack_forget()
Что вам нужно сделать, это установить фрейм в главное окно и поместить все, что нужно очистить, в какой-то момент внутри этого фрейма. Тогда вы просто делаете frame_name.destroy()
В следующем примере есть кнопка, которая создает фрейм с несколькими виджетами надписей, и кнопка.
Кнопка вызывает метод, который уничтожит фрейм и все в нем.
Затем вы можете создать кадр снова с первой кнопкой.
Дайте мне знать, если у вас есть какие-либо вопросы:
import tkinter as tk
class ExampleApp(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master = master
self.some_frame = None
tk.Button(self.master, text="Create new frame with widgets!", command = self.create_stuff).pack()
def create_stuff(self):
if self.some_frame == None:
self.some_frame = tk.Frame(self.master)
self.some_frame.pack()
for i in range(5):
tk.Label(self.some_frame, text = "This is label {}!".format(i+1)).pack()
tk.Button(self.some_frame, text="Destroy all widgets in this frame!",
command= self.destroy_some_frame).pack()
def destroy_some_frame(self):
self.some_frame.destroy()
self.some_frame = None
root = tk.Tk()
my_example = ExampleApp(root)
root.mainloop()
Вы можете использовать метод уничтожения для каждого виджета, например, если это кнопка, вы пишете btn1.destroy () и делаете это для всех виджетов. Метод забудьте не рекомендуется, поскольку он удаляет только виджеты.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.