Как скрыть кнопку в tkinter
Одним из наиболее используемых компонентов в графических программах является кнопка. В tkinter кнопки представлены классом Button . Основные параметры виджета Button:
- command : функция, которая вызывается при нажатии на кнопку
- compund : устанавливает расположение картинки и текста относительно друг друга
- cursor : курсор указателя мыши при наведении на метку
- image : ссылка на изображение, которое отображается на метке
- pading : отступы от границ вилжета до его текста
- state : состояние кнопки
- text : устанавливает текст метки
- textvariable : устанавливает привязку к элементу StringVar
- underline : указывает на номер символа в тексте кнопки, который подчеркивается. По умолчанию значение -1, то есть никакой символ не подчеркивается
- width : ширина виджета
Добавим в окно обычную кнопку из пакета ttk:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") # стандартная кнопка btn = ttk.Button(text="Button") btn.pack() root.mainloop()
Для создания кнопки используется конструктор Button() . В этом конструкторе с помощью параметра text можно установить текст кнопки.
Чтобы разместить виджет в контейнере (главном окне), у него вызывается метод pack() . На ОС Windows мы получим следующую кнопку:
Конструктор Button определяет различные параметры, которые позволяют настроить поведение и внешний вид кнопки. Однако конкретный набор параметров зависит от того, используем ли мы кнопки из пакета tkinter или из пакета tkinter.ttk.
Обработка нажатия на кнопку
Для обработки нажатия на кнопку необходимо установить в конструкторе параметр command , присвоив ему ссылку на функцию, которая будет срабатывать при нажатии:
from tkinter import * from tkinter import ttk clicks = 0 def click_button(): global clicks clicks += 1 # изменяем текст на кнопке btn["text"] = f"Clicks " root = Tk() root.title("METANIT.COM") root.geometry("250x150") btn = ttk.Button(text="Click Me", command=click_button) btn.pack() root.mainloop()
Здесь в качестве обработчика нажатия устанавливается функция click_button. В этой функции изменяется глобальная переменная clicks, которая хранит число кликов. Кроме того, изменяем текст кнопки, чтобы визуально было видно сколько нажатий произведено. Таким образом, при каждом нажатии кнопки будет срабатывать функция click_button, и количество кликов будет увеличиваться:
Отключение кнопки
Для ttk-кнопки мы можем установить отключенное состояние с помощью метода state() , передав ему значение «disabled». С такой кнопкой пользователь не сможет взаимодействовать:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") btn = ttk.Button(text="Click Me", state=["disabled"]) btn.pack() root.mainloop()
При этом в метод state мы можем передать набор состояний, поэтому значение «disabled» передается внутри списка.
Отображение виджетов в tkinter: скрыть и вернуть обратно
Мне нужно завершать функцию и удалять объекты button и Label после начала выполнения другой функции.Вот эта функция:
def child(): btn = Button(root, text="Подтвердить", background="#708090",padx="20", pady="8", font="16") o = Entry(root) def sum_back(): if int(o.get())
Далее идет другая функция. Так вот , мне нужно, что бы после нажатия на n ную кнопку функция "скрывала" кнопки и лейблы. А после повторного вызывания функции снова "возвращала".
Отслеживать
52.4k 11 11 золотых знаков 110 110 серебряных знаков 312 312 бронзовых знаков
задан 1 мар 2018 в 8:25
Камень Булыжникович Камень Булыжникович
23 1 1 золотой знак 1 1 серебряный знак 4 4 бронзовых знака
связанный вопрос How to delete Tkinter widgets from a window?
1 мар 2018 в 17:27
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Можно при помощи компоновщика .grid() добавлять объект и временно удалять при помощи .grid_remove()
Пример:
import tkinter def func(): label_visible_false.grid() button_visible_false.grid() label_visible_true.grid_remove() button_visible_true.grid_remove() def visible_true(): label_visible_false.grid_remove() button_visible_false.grid_remove() label_visible_true.grid() button_visible_true.grid() root = tkinter.Tk() root.geometry("400x400") label_visible_true = tkinter.Label(root, text='Не скрытый текст') label_visible_true.grid() button_visible_true = tkinter.Button(root, text='Не скрытая кнопка', command=func) button_visible_true.grid() label_visible_false = tkinter.Label(root, text='Скрытый текст') button_visible_false = tkinter.Button(root, text='Скрытая кнопка', command=visible_true) root.mainloop()
Так же это можно сделать с pack() при помощи функции pack_forget() Пример c pack() :
import tkinter def func(): label_visible_false.pack() button_visible_false.pack() label_visible_true.pack_forget() button_visible_true.pack_forget() def visible_true(): label_visible_false.pack_forget() button_visible_false.pack_forget() label_visible_true.pack() button_visible_true.pack() root = tkinter.Tk() root.geometry("400x400") label_visible_true = tkinter.Label(root, text='Не скрытый текст') label_visible_true.pack() button_visible_true = tkinter.Button(root, text='Не скрытая кнопка', command=func) button_visible_true.pack() label_visible_false = tkinter.Label(root, text='Скрытый текст') button_visible_false = tkinter.Button(root, text='Скрытая кнопка', command=visible_true) root.mainloop()
Так же можно и с place() при помощи того же place_forget()
import tkinter def func(): label_visible_false.place(x=0, y=50) button_visible_false.place(x=0, y=100) label_visible_true.place_forget() button_visible_true.place_forget() def visible_true(): label_visible_false.place_forget() button_visible_false.place_forget() label_visible_true.place(x=0, y=50) button_visible_true.place(x=0, y=100) root = tkinter.Tk() root.geometry("400x400") label_visible_true = tkinter.Label(root, text='Не скрытый текст') label_visible_true.place(x=0, y=50) button_visible_true = tkinter.Button(root, text='Не скрытая кнопка', command=func) button_visible_true.place(x=0, y=100) label_visible_false = tkinter.Label(root, text='Скрытый текст') button_visible_false = tkinter.Button(root, text='Скрытая кнопка', command=visible_true) root.mainloop()
Учебник по Tkinter – Использование кнопок Tkinter
Привет всем! В сегодняшней статье о Tkinter мы рассмотрим виджет кнопки Tkinter.
- Автор записи Автор: Pankaj Kumar
- Дата записи 17.05.2021
Привет всем! В сегодняшней статье о Tkinter мы рассмотрим виджет кнопки Tkinter.
Виджет кнопки Tkinter – это очень простой и удобный в использовании виджет.
Давайте посмотрим, как мы можем создавать кнопки и добавлять функциональность в наше графическое приложение, используя несколько наглядных примеров!
Виджет кнопки Tkinter
Этот виджет можно использовать для создания различных типов кнопок.
У нас могут быть кнопки, содержащие не только текст, но и изображения!
Мы также можем заставить кнопку Tkinter вызывать определенную функцию, соответствующую функциональности кнопки, используя функцию обратного вызова .
Чтобы определить кнопку с определенным текстом и функцией обратного вызова, мы можем использовать следующее определение:
button = tk.Button(master, text, command)
Здесь text – это текст на кнопке, а command относится к функции обратного вызова, которая вызывается при нажатии кнопки.
Давайте теперь сделаем простое приложение, имеющее кнопку, которая при нажатии отображает окно предупреждения, которое сообщает нам, что оно было нажато!
Приведенный ниже фрагмент кода показывает это, с комментариями, объясняющими каждую строку кода.
import tkinter as tk from tkinter import messagebox # Create the master object master = tk.Tk() # Sets the window size as "300x300" master.geometry("300x300") # This is the button callback function # This must be visible to the button, so we must define it before the button widget! def buttonCallback(): messagebox.showinfo("Message", "You have clicked the Button!") # Create a Button widget button = tk.Button(master, text="Click", command=buttonCallback) # And a label for it label_1 = tk.Label(master, text="Simple Button") # Use the grid geometry manager to put the widgets in the respective position label_1.grid(row=0, column=0) button.grid(row=1, column=0) # The application mainloop tk.mainloop()
Теперь, запустив эту программу, вы получите следующий результат.
Теперь, если вы хотите, чтобы изображение шло вместе с вашей кнопкой, чтобы сделать его немного более причудливым, это возможно!
Просто добавьте еще один аргумент ключевого слова в tk.Button() call, called image ! Это ImageTk.PhotoImage , экземпляр которого необходимо создать с помощью файла изображения.
Чтобы использовать ImageTk , мы должны импортировать его из модуля PIL . Сначала мы создаем изображение PIL , изменяем его размер так, чтобы оно было достаточно маленьким, а затем из вашего фотоизображения .
from PIL import Image, ImageTk # Create a tk.PhotoImage my_image = Image.open("path/to/image.png") # Resize it to fit button dimensions my_image = my_image.resize((25, 25), Image.ANTIALIAS)
Теперь мы готовы сформировать объект фотоизображения.
my_image = Imagetk.PhotoImage(my_image)
Теперь, наконец, мы можем добавить его в нашу кнопку!
b = Button(compound=LEFT, image=my_image, text="Button")
Однако вы должны быть немного осторожны, так как использование значка переопределит любой текст, который есть у кнопки.
Чтобы избежать этого, используйте аргумент ключевого слова compound . Это значение может быть установлено в tk.ЦЕНТР , тк.СЛЕВА , тк.СПРАВА , тк.СВЕРХУ или т. К. СНИЗУ . Это определит ориентацию текста по отношению к изображению.
Поскольку мы поместим текст поверх изображения, мы будем использовать tk.TOP
b = Button(compound=LEFT, image=my_image, text="Button", compound=tk.TOP)
Я покажу вам полный код ниже:
import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk # Create the master object master = tk.Tk() # Sets the window size as "300x300" master.geometry("300x300") # This is the button callback function # This must be visible to the button, so we must define it before the button widget! def buttonCallback(): messagebox.showinfo("Message", "You have clicked the Button!") # Create a tk.PhotoImage my_image = Image.open("debian.png") # Resize it to fit button dimensions my_image = my_image.resize((25, 25), Image.ANTIALIAS) # Finally, get the PhotoImage object my_image = ImageTk.PhotoImage(my_image) # Create a Button widget button = tk.Button(master, text="Click", image=my_image, command=buttonCallback, compound=tk.TOP) # And a label for it label_1 = tk.Label(master, text="Simple Button") # Use the grid geometry manager to put the widgets in the respective position label_1.grid(row=0, column=0) button.grid(row=1, column=0) # The application mainloop tk.mainloop()
Вывод
Надеюсь, вы также смогли создать свой собственный виджет кнопок Tkinter. В следующих уроках мы больше сосредоточимся на некоторых виджетах, так что следите за обновлениями!
Читайте ещё по теме:
- Виджеты Tkinter GUI – полная ссылка
- Учебник Tkinter – Часть 2
- Понимание метода Python перечисления ()
- Как работает метод Python Issubclass ()?
- Примеры Python Tkinter: Машина случайных фактов
- Виджет Tkinter TreeView
- Как изменить шрифт кнопки TKinter?
Как скрыть, восстановить и удалить виджеты Tkinter?
Tkinter - это пакет Python для создания приложений с графическим интерфейсом пользователя (GUI). Tkinter предоставляет нам множество общих элементов графического интерфейса, которые мы можем использовать для создания интерфейсов, таких как кнопки, метка, рамка, сообщение, меню, и различные виды полей ввода и областей отображения. Мы называем эти элементы виджетами.
Виджет - это элемент графического интерфейса пользователя (GUI), который иллюстрирует информацию, чтобы пользователь мог взаимодействовать с ОС. В Tkinter виджеты - это объекты; экземпляры классов, представляющих кнопки, фреймы и т. д.
В этой статье мы продемонстрируем, как скрыть, восстановить и удалить виджеты Tkinter, используя различные элементы виджетов, такие как кнопки, метки, рамки и т. Д.
Мы могли бы скрыть виджеты Tkinter, вызвав метод pack_forget (), чтобы сделать виджеты невидимыми. Нам нужно снова вызвать метод pack (), чтобы упаковать виджет и сделать его видимым или восстановить. Мы также можем удалить виджеты Tkinter навсегда, вызвав метод destroy () в этом разделе.
Пример 1: Скрыть и восстановить кнопку в Tkinter с помощью метода Forgot_pack ( ) и pack ().
Синтаксис:
widget.forget_pack ()
Widget can be any valid widget which is visible.