Как удалить виджет в tkinter
![]()
Для полного удаления виджета можно использовать метод destroy , пример:
После нажатия кнопка удалится полностью (т.е. с ней больше нельзя будет ничего сделать: например, при попытке разместить ее повторно будет ошибка).
Если виджет нужно временно удалить из окна с возможностью потом вернуть, то используйте следующие методы:
Методы .grid_forget , .pack_forget (он же просто .forget ), .place_forget удаляют виджет из окна, но виджет продолжает сущестовать, его можно снова разместить в окне.
Метод .grid_remove позволяет скрыть виджет, и потом вернуть его обратно с теми же параметрами и в то же место (в ту же строку и колонку сетки) просто вызовом .grid() без параметров.
Deleting widgets with Tkinter destroy()
The Tkinter destroy method has the ability to “destroy” any Tkinter GUI objects. This includes widgets like Entry, Button, Toplevel and even the entire Tkinter application.
The syntax is very simple. You simply have to call it as a method on any Tkinter object as shown below.
The Destroy Function
When used on root the destroy function will cause Tkinter to exit the mainloop() and simultaneously destroy all the widgets within the mainloop() .
The window produced by the above code. Clicking the button will destroy the window, causing it to disappear.

The code below is used simply to destroy a single individual widget.
Below is short 3 second video demonstrating the effect of the above code.
This marks the end of the Tkinter destroy widget article. Any suggestions or contributions for CodersLegacy are more than welcome. Questions regarding the article content can be asked in the comments section below.
Не удаляется кнопка в tkinter python. Что делать?
Почему не удаляется? И тогда как удалить эту кнопку в функции?
- Вопрос задан более двух лет назад
- 566 просмотров
Средний 2 комментария
- Вконтакте
Не надо никаких глобалов. В данном случае можно вообще обойтись без промежуточной функции, просто привязать метод самой кнопки
Если все же нужна доп. функция (например доп. функционал), то передавать аргументы можно используя lambda/partial
# Удаление виджетов — delete widgets
Удаление виджетов из интерфейса осуществляется двумя способами:
- скрытие выджета — делая его невидимым
- удаление виджета
pack_forget() , grid_forget() или grid_remove() — сделает виджет временно невидимым. Какой из них вы выберете, зависит от того, используете ли вы сетку или пакет, и хотите ли вы, чтобы сетка запомнила, где она была, чтобы вы могли позже поместить ее обратно в то же место.
destroy() — метод удаляет виджет.
Для примера используем код программы, в которой command=lambda: b.pack_forget() — создается лямбда функция, вызывающая у созданного объекта button метод pack_forget() :
Результат выполнения до нажатия кнопки:
Результат выполнения после нажатия кнопки:
# Упражнения
- Напишите простую программу, состоящую из метки (label) и кнопки. При нажатии на кнопку метка должна скрываться.
Результат программы до и после нажатия на кнопку:
Напишите программу с двумя кнопками отрисованные методом .pack() :
- при нажании первой кнопки она скрывает сама себя.
- при нажатии второй кнопки она отрисовывает первую кнопку на прежнее место.
# Добавление/удаление виджетов — Add/delete widgets
Для добавления и удаления виджетов создадим программу с функцией создания кнопок, которые будут удалять сами себя:
Результат программы до и после нажатия на кнопку:
Изменим добавление кнопок слева и добавим счетчик для наглядности удаления: кнопка удаляет саму себя:
Результат программы после добавления и удаления некоторых кнопок:
# Упражнения
Напишите программу добавляющую кнопки справа, должно получиться следующего вида:
Напишите программу добавляющую кнопки в сетку — grid по диагонали. Для удаления виджетов используем методы: grid_forget() или grid_remove() . Должно получиться следующего вида:
Напишите программу добавляющую нопки в сетку — grid в первую колонку и увеличивающую длину заполняемых колонок. Добавление метки: Label(text=»Column <>».format(i)).grid(row=0, column=i) Для размещения и заполнения кнопки используется следующий код: …grid(row=i, column=0, columnspan=i+1, stick=NSEW) Должно получиться следующего вида:
# Добавление/удаление нескольких виджетов
Добавление группы виждетов одновременно с расчетом на дальнейшее возможное их удаление, можно создавать дополнительный фрейм, в него помещать все новые виджеты. При удалении группы виджетов, нужно просто удалить фрейм:
Результат программы после добавления и удаления некоторых виджетов:
# Упражнения
Напишите программу добавляющую Label и кнопку для удаления:
Напишите программу добавляющую Radiobutton и кнопку для удаления:
Напишите программу добавляющую Checkbutton, Entry и кнопку для удаления:
Напишите программу генирующую список задач, с нумерацие и возможностью удаления.

Реализуя поведение нумерации, как в нумерованных списках текстовых редакторов. Внесите следующие изменения: