Python import tkinter ttk

Виджеты

Ключевым строительным блоком в графическом приложении являются различные элементов управления, с которыми взаимодействует пользователь, как кнопки, метки, поля ввода. В 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()

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

Читайте также:  Java grizzly http server

Виджеты 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).

В самой функции для виджета выводим информацию о классе, ширине, высоте и координатах Х и 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

Источник

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