# Удаление виджетов — delete widgets
Удаление виджетов из интерфейса осуществляется двумя способами:
pack_forget() , grid_forget() или grid_remove() — сделает виджет временно невидимым. Какой из них вы выберете, зависит от того, используете ли вы сетку или пакет, и хотите ли вы, чтобы сетка запомнила, где она была, чтобы вы могли позже поместить ее обратно в то же место.
destroy() — метод удаляет виджет.
Для примера используем код программы, в которой command=lambda: b.pack_forget() — создается лямбда функция, вызывающая у созданного объекта button метод pack_forget() :
from tkinter import * from tkinter.ttk import * root = Tk() label = Label(text="The button will be hidden. ") label.pack() button = Button(root, text="Hidden me", command=lambda: button.pack_forget()) button.pack() root.mainloop()
Результат выполнения до нажатия кнопки:
Результат выполнения после нажатия кнопки:
# Упражнения
- Напишите простую программу, состоящую из метки (label) и кнопки. При нажатии на кнопку метка должна скрываться.
Результат программы до и после нажатия на кнопку:
- Напишите программу с двумя кнопками отрисованные методом .pack() :
- при нажании первой кнопки она скрывает сама себя.
- при нажатии второй кнопки она отрисовывает первую кнопку на прежнее место.
# Добавление/удаление виджетов — Add/delete widgets
Для добавления и удаления виджетов создадим программу с функцией создания кнопок, которые будут удалять сами себя:
from tkinter import * from tkinter.ttk import * def add_button(): button = Button(text="I am here.)", command=lambda: button.pack_forget()) button.pack() root = Tk() button = Button(root, text="Add button", command=add_button) button.pack() root.mainloop()
Результат программы до и после нажатия на кнопку:
Изменим добавление кнопок слева и добавим счетчик для наглядности удаления: кнопка удаляет саму себя:
from tkinter import * from tkinter.ttk import * i = 1 def add_button(): global i button = Button(text="I am <>".format(i), command=lambda: button.pack_forget()) button.pack(side=LEFT) i += 1 root = Tk() button = Button(root, text="Add button", command=add_button) button.pack() root.mainloop()
Результат программы после добавления и удаления некоторых кнопок:
# Упражнения
- Напишите программу добавляющую кнопки справа, должно получиться следующего вида:
- Напишите программу добавляющую кнопки в сетку — 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) Должно получиться следующего вида:
# Добавление/удаление нескольких виджетов
Добавление группы виждетов одновременно с расчетом на дальнейшее возможное их удаление, можно создавать дополнительный фрейм, в него помещать все новые виджеты. При удалении группы виджетов, нужно просто удалить фрейм:
from tkinter import * from tkinter.ttk import * i = 1 def add_widgets(): global i lbl_frm = Labelframe(text="Frame <>".format(i)) lbl_frm.pack() Entry(lbl_frm, text="Text entry <>".format(i)).grid(row=0, column=0, stick=NSEW) button = Button(lbl_frm, text="Delete frame <>".format(i), command=lambda: lbl_frm.destroy()) button.grid(row=0, column=1) i += 1 root = Tk() Button(text="Add button", command=add_widgets).pack() root.mainloop()
Результат программы после добавления и удаления некоторых виджетов:
# Упражнения
- Напишите программу добавляющую Label и кнопку для удаления:
- Напишите программу добавляющую Radiobutton и кнопку для удаления:
- Напишите программу добавляющую Checkbutton, Entry и кнопку для удаления:
- Напишите программу генирующую список задач, с нумерацие и возможностью удаления. Реализуя поведение нумерации, как в нумерованных списках текстовых редакторов. Внесите следующие изменения:
- сгенерированые виджеты сохранять в массив для дальнейшей обработки.
- при удалении поледних виджетов, виджеты сгенерированые заново начнут номерацию с последнего номера отрисованного виджета.
- удаление виджета по середите ведет к удалению виджета из массива переименованию всех виджетов (перерисовки массива)
How to Delete Tkinter Button After Click
I n this tutorial, we are going to see how to delete Tkinter button after click in Python. to remove a widget from the Tkinter window, you can call the method pack_forget()(use pack() to add it to the window).
How to Delete Tkinter Button After Click
from tkinter import * root = Tk() root.geometry('200x100') b = Button(root, text="Destroy me", command=lambda: b.pack_forget()) b.pack(pady=20) root.mainloop()
MCQ Practice competitive and technical Multiple Choice Questions and Answers (MCQs) with simple and logical explanations to prepare for tests and interviews. Read More
- Button Tkinter | Python 3
- Label Tkinter | Python 3
- Text Tkinter | Python 3
- Entry Tkinter | Python 3
- Message Tkinter | Python 3
- Checkbutton Tkinter | Python 3
- Radiobutton Tkinter | Python 3
- Menu Tkinter | Python 3
- Menubutton Tkinter | Python 3
- Frame Tkinter | Python 3
- Scrollbar Tkinter | Python 3
- Spinbox Tkinter | Python 3
- Listbox Tkinter | Python 3
- Canvas Tkinter | Python 3
- tkMessageBox Tkinter | Python 3
- LabelFrame Tkinter | Python 3
- Scale Tkinter | Python 3
- Toplevel Tkinter | Python 3
- PanedWindow Tkinter | Python 3
- pack() Method in Tkinter Python 3
- grid() Method in Tkinter Python 3
- place() Method in Tkinter Python 3
- How to Get Window Size in Tkinter Python
- How to Set Default Tkinter Entry Value in Python
- How to Change the Default Icon on a Tkinter Window
- How to Bind The Enter key to a Function in Tkinter
- How to Clear Text From a Text Widget on Click in Tkinter
- How to Set The Width and Height of a Tkinter Entry
- How to Get the Input From the Tkinter Text Widget
- How to Make Tkinter Text Widget Read Only
- How to Increase Font Size in Text Widget in Tkinter
- How to Get the Tkinter Label Text
- How To Show/Hide a Label in Tkinter After Pressing a Button
- How to Delete Tkinter Button After Click
- How to Change Label Text on Button Click in Tkinter
- How to Change the Font Size in a Label in Tkinter Python
- How to Make a Timer in Python Tkinter
- How To Display a Tkinter Window in Fullscreen
- How to Stop a Tkinter Window From Resizing
- How to Open a New Window With a Button in Python Tkinter
- How to Disable/Enable Tkinter Button in Python
- How to Close a Tkinter Window With a Button
- How to Pass Arguments to Tkinter button’s callback Command?
- How to Bind Multiple Commands to Tkinter Button
- How to Change Background Color of the Window in Tkinter Python
- How to Change Background Color of a Tkinter Button in Python
- How to Change Text of Button When Clicked in Tkinter Python
- How to change font and size of buttons in Tkinter Python
- How to Set Tkinter Window Size – Python
- How To Add Image To Button In Python Tkinter
- How to Change Label Text on Button Click in Tkinter
- How To Show/Hide a Label in Tkinter After Pressing a Button
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.
root.destroy() # Destroys the whole Tkinter application mylabel.destroy() # Destroys a label toplevel.destroy() # Destroys a window
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() .
from tkinter import * def close(): root.destroy() root = Tk() root.geometry('200x100') button = Button(root, text = 'Close the window', command = close) button.pack(pady = 10) root.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.
from tkinter import * def delete(): mylabel.destroy() root = Tk() root.geometry('150x100') mylabel = Label(root, text = "This is some random text") mylabel.pack(pady = 5) mybutton = Button(root, text = "Delete", command = delete) mybutton.pack(pady = 5) root.mainloop()
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.