Python Tkinter очищает фрейм

Я пытаюсь очистить фрейм в tkinter, чтобы новое содержимое можно было записать (обновить информацию), но я не смог этого сделать. Я знаю об этих

frame.destroy()
frame.pack_forget()
frame.grid_forget()

но frame.destroy() полностью удалит фрейм. И другие два тоже не могли дать мне результат, который я хочу. Что мне нужно, просто очистить все элементы в кадре, но сам кадр останется. Есть ли способ сделать это?

Ответы

Ответ 1

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

Для этого у вас есть два варианта: уничтожить каждый по отдельности или уничтожить фрейм, который приведет к уничтожению всех его детей. Последний, как правило, самый простой и эффективный.

Поскольку вы утверждаете, что не хотите уничтожать рамку контейнера, создайте вторичный фрейм. Пусть этот вторичный кадр будет контейнером для всех виджетов, которые вы хотите удалить, а затем поместите этот один кадр внутри родителя, который вы не хотите уничтожать. Тогда это просто вопрос уничтожения этого кадра, и все внутренние виджеты будут уничтожены вместе с ним.

Ответ 2

http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/universal.html

w.winfo_children()
Возвращает список всех w детей в их порядок укладки от нижнего (нижнего) до верхнего (верхний).

for widget in frame.winfo_children():
    widget.destroy()

Уничтожит весь виджет в вашем фрейме. Нет необходимости во втором кадре.