Python tkinter как удалить объект
Для удаления применяется метод delete() , который в качестве параметра принимает идентификатор удаляемого элемента.
Здесь по нажатию на кнопку удаляется сама кнопка. В качестве аргумента в метод delete() передается идентификатор, который мы получаем при добавлении кнопки.
Управление координатами
Для получения/изменения координат элеимента применяется метод coords() :
Первая версия возвращает координаты в виде списка значений для элемента с определенным идентификатором.
Вторая и третья версии изменяют позицию, получая в качестве второго/третьего параметра(ов) новые координаты.
Например, динамически изменим координаты:
Здесь по нажатию на кнопку к координате y добавляется +-10. Когда кнопка достигает границ Canvas, то изменяем знак приращения на противоположный, и таким образом, кнопка изменяет направление движения.
Изменение параметров элемента
Для изменения параметров элемента на Canvas применяется метод itemconfigure() . В качестве обязательного параметра он принимает идентифкатор изменяемого элемента, а второй параметр — набор устанавливаемых параметров:
Например, изменим цвет линии:
В данном случае в окне определены два переключателя Radiobutton. Они привязаны к переменной selected_color, которая хранит выбранный цвет — «red» или «blue».
На canvas нарисована линия. При нажатии на один из переключателей изменяем цвет линии:
How to clear out a frame in the Tkinter?
Tkinter frames are used to group and organize too many widgets in an aesthetic way. A frame component can contain Button widgets, Entry Widgets, Labels, ScrollBars, and other widgets.
If we want to clear the frame content or delete all the widgets inside the frame, we can use the destroy() method. This method can be invoked by targeting the children of the frame using winfo_children().
Example
Output
Running the above code will display a window containing a button “Clear” that targets all the widgets inside the frame and clears it.

Now click on the “Clear” Button and it will clear all the widgets inside the frame.
# Удаление виджетов — 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 и кнопку для удаления:
Напишите программу генирующую список задач, с нумерацие и возможностью удаления.

Реализуя поведение нумерации, как в нумерованных списках текстовых редакторов. Внесите следующие изменения:
How to delete Tkinter widgets from a window?
I have a list of tkinter widgets that I want to change dynamically.
How to delete the widgets from the window?
9 Answers 9
You can call pack_forget to remove a widget (if you use pack to add it to the window).
If you use pack_forget , you can later show the widget again calling pack again. If you want to permanently delete it, call destroy on the widget (then you won’t be able to re-add it).
If you use the grid method, you can use grid_forget or grid_remove to hide the widget.
![]()
One way you can do it, is to get the slaves list from the frame that needs to be cleared and destroy or «hide» them according to your needs. To get a clear frame you can do it like this:
You should call grid_slaves() , pack_slaves() or slaves() depending on the method you used to add the widget to the frame.
You simply use the destroy() method to delete the specified widgets like this:
Using this you can completely destroy the specific widgets.
![]()
You say that you have a list of widgets to change dynamically. Do you want to reuse and reconfigure existing widgets, or create all new widgets and delete the old ones? It affects the answer.
If you want to reuse the existing widgets, just reconfigure them. Or, if you just want to hide some of them temporarily, use the corresponding «forget» method to hide them. If you mapped them with pack() calls, you would hide with pack_forget() (or just forget() ) calls. Accordingly, grid_forget() to hide gridded widgets, and place_forget() for placed widgets.