Python tkinter ttk button

Python tkinter ttk button

Одним из наиболее используемых компонентов в графических программах является кнопка. В 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 мы получим следующую кнопку:

Кнопка в tkinter в Python

Конструктор 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, и количество кликов будет увеличиваться:

Читайте также:  Php узнать значение массива

Обработка нажатия кнопки в tkinter и Python

Отключение кнопки

Для 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 : текстовая метка
  • Entry : однострочное текстовое поле
  • Text : многострочное текстовое поле
  • Checkbutton : флажок
  • Radiobutton : переключатель или радиокнопка
  • Frame : фрейм, который организует виджеты в группы
  • Listbox : список
  • Combobox : выпадающий список
  • Menu : элемент меню
  • Scrollbar : полоса прокрутки
  • Treeview : позволяет создавать древовидные и табличные элементы
  • Scale : текстовая метка
  • Spinbox : список значений со стрелками для перемещения по элементам
  • Progressbar : текстовая метка
  • Canvas : текстовая метка
  • Notebook : панель вкладок

Tkinter предоставляет виджеты в двух вариантах: виджеты, которые располагаются непосредственно в пакете tkinter , и виджеты из пакета tkinter.ttk . С одной стороны, оба пакета предоставляют практически одни и те же виджеты, например, виджет Button есть в обоих пакетах. Но с другой стороны, ttk предоставляет чуть больше функциональности по настройке виджетов, в частности, по их стилизации. И считается, что виджеты из ttk несколько современнее, чем стандартные, в то же время с ttk, возможно, чуть сложнее работать. Что именно использовать остается на выбор разработчика.

Рассмотрим разницу на примере виджета Button. Сначала посмотрим на стандартный виджет Button из общего пакета tkinter :

from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("250x200") btn = Button(text="Click") # создаем кнопку из пакета ttk btn.pack() # размещаем кнопку в окне root.mainloop()

Виджеты в графическом приложении tkinter и python

Теперь посмотрим на примере кнопки из пакета ttk :

from tkinter import * from tkinter import ttk # подключаем пакет ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") btn = ttk.Button(text="Click") # создаем кнопку из пакета ttk btn.pack() # размещаем кнопку в окне root.mainloop()

По сути мы создаем ту же самую кнопку с той же надписью, однако ее внешний вид будет несколько иной:

Читайте также:  Html bold blue text

Виджеты ttk в tkinter и python

В дальнейшем я буду ориентироваться прежде всего на виджеты из пакета ttk, но перейти на стандартные виджеты не составит особого труда.

Параметры виджета

Виджет обладает набором параметров, которые позволяют настроить его внешний вид и поведение. У каждого виджета свой набор параметров. Обычно параметры задаются через конструктор. Например, в примере выше у кнопки устанавливался параметр text , который задает текст на кнопке:

ttk.Button(text="Click") # устанавливаем параметр text

Но обращаться к параметрам можно и вне конструктора, используя имя переменной виджета и синтаксис словарей:

from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x150") btn = ttk.Button() btn.pack() # устанавливаем параметр text btn["text"]="Send" # получаем значение параметра text btnText = btn["text"] print(btnText) root.mainloop()

Получение и установка параметров виджета в tkinter и python

Для изменения параметров виджета также можно использовать метод config() , в который передаются параметры и их значения:

btn = ttk.Button() btn.pack() # устанавливаем параметр text btn.config(text="Send Email")

Получение информации о виджете

Для получения информации о виджете можно использовать ряд его атрибутов. Рассмотрим некоторые из них:

  • winfo_class : возвращает класс виджета, например, для кнопки это класс TButton
  • winfo_children : возвращает для текущего виджета список вложенных виджетов
  • winfo_parent : возвращает родительский виджет
  • winfo_toplevel : возвращает окно, которое содержит данный виджет
  • winfo_width и winfo_height : текущая ширина и высота виджета
  • winfo_reqwidth и winfo_reqheight : запрошенная виджетом ширина и высота
  • winfo_x и winfo_y : x и y координаты верхнего левого угла виджета относительно родительского элемента
  • winfo_rootx и winfo_rooty : x и y координаты верхнего левого угла виджета относительно экрана
  • winfo_viewable : указывает, отображается ли виджет или скрыт

Например, получим информацию о всех виджетах в окне:

from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("250x200") btn = Button(text="Hello") btn.pack() def print_info(widget, depth=0): widget_class=widget.winfo_class() widget_width = widget.winfo_width() widget_height = widget.winfo_height() widget_x = widget.winfo_x() widget_y = widget.winfo_y() print(" "*depth + f" width= height= x= y=") for child in widget.winfo_children(): print_info(child, depth+1) root.update() # обновляем информацию о виджетах print_info(root) root.mainloop()

Здесь определена функция print_info() , которая в качестве параметров получает виджет, информацию о котором надо вывести на консоль, и уровень в визуальной иерархии элементов (depth).

Читайте также:  Php self call function

В самой функции для виджета выводим информацию о классе, ширине, высоте и координатах Х и Y, а также для каждого вложенного виджета рекурсивно вызываем эту же функцию.

Чтобы установленные размеры и позиции были применены к виджетам до вызыва root.mainloop() , вызываем метод root.update()

В данном случае визуальная иерархия виджетов не такая глубокая — всего два элемента — окно (Tk) и кнопка (Button), соответственно консольный вывод будет следуюшим:

Tk width=250 height=200 x=104 y=104 Button width=39 height=26 x=105 y=0

Источник

Оцените статью