tkinter.ttk — Виджеты на тему Tk

Источник: Lib/tkinter/ttk.py


Модуль tkinter.ttk предоставляет доступ к набору тематических виджетов Tk, представленному в Tk 8.5. Он предоставляет дополнительные преимущества, включая рендеринг шрифтов со сглаживанием в X11 и прозрачность окон (для этого требуется оконный менеджер композиции в X11).

Основная идея tkinter.ttk заключается в том, чтобы отделить, насколько это возможно, код, реализующий поведение виджета, от кода, реализующего его внешний вид.

См.также

Tk Widget Styling Support

Документ, представляющий поддержку тематического оформления для Tk

Использование Ttk

Чтобы начать использовать Ttk, импортируйте его модуль:

from tkinter import ttk

Чтобы переопределить основные виджеты Tk, импорт должен следовать стандарту Tk import:

from tkinter import *
from tkinter.ttk import *

Этот код заставляет несколько виджетов tkinter.ttk (Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale и Scrollbar) автоматически заменить виджеты Tk.

Это дает прямое преимущество использования новых виджетов, что обеспечивает лучший внешний вид и ощущение на всех платформах; однако заменяющие виджеты не полностью совместимы. Основное отличие заключается в том, что такие опции виджетов, как «fg», «bg» и другие, связанные со стилизацией виджетов, больше не присутствуют в виджетах Ttk. Вместо этого используйте класс ttk.Style для улучшения эффектов стилизации.

См.также

Converting existing applications to use Tile widgets

Монография (с использованием терминологии Tcl) о различиях, обычно возникающих при переводе приложений на использование новых виджетов.

Виджеты Ttk

Ttk поставляется с 18 виджетами, двенадцать из которых уже существовали в tkinter: Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale, Scrollbar и Spinbox. Остальные шесть - новые: Combobox, Notebook, Progressbar, Separator, Sizegrip и Treeview. И все они являются подклассами Widget.

Использование виджетов Ttk улучшает внешний вид приложения. Как уже говорилось выше, существуют различия в том, как кодируется стилизация.

Код Tk:

l1 = tkinter.Label(text="Test", fg="black", bg="white")
l2 = tkinter.Label(text="Test", fg="black", bg="white")

Код Ttk:

style = ttk.Style()
style.configure("BW.TLabel", foreground="black", background="white")

l1 = ttk.Label(text="Test", style="BW.TLabel")
l2 = ttk.Label(text="Test", style="BW.TLabel")

Более подробную информацию о TtkStyling смотрите в документации по классу Style.

Виджет

ttk.Widget определяет стандартные опции и методы, поддерживаемые тематическими виджетами Tk, и не предназначен для прямого инстанцирования.

Стандартные опции

Все ttk Виджеты принимают следующие параметры:

Вариант

Описание

класс

Указывает класс окна. Класс используется при запросе базы данных опций для других опций окна, для определения биндтегов по умолчанию для окна, а также для выбора макета и стиля виджета по умолчанию. Этот параметр доступен только для чтения и может быть указан только при создании окна.

курсор

Определяет курсор мыши, который будет использоваться для виджета. Если задана пустая строка (по умолчанию), курсор наследуется для родительского виджета.

takefocus

Определяет, принимает ли окно фокус во время обхода клавиатуры. Возвращается 0, 1 или пустая строка. Если возвращается 0, это означает, что окно должно быть полностью пропущено при обходе клавиатуры. Если возвращается 1, это означает, что окно должно получать фокус ввода до тех пор, пока оно доступно для просмотра. А пустая строка означает, что скрипты обхода принимают решение о том, фокусироваться на окне или нет.

стиль

Может использоваться для задания пользовательского стиля виджета.

Параметры прокручиваемого виджета

Следующие параметры поддерживаются виджетами, управляемыми полосой прокрутки.

Вариант

Описание

xscrollcommand

Используется для взаимодействия с горизонтальными полосами прокрутки.

Когда вид в окне виджета меняется, виджет генерирует Tcl-команду, основанную на команде прокрутки.

Обычно этот параметр состоит из метода Scrollbar.set() некоторой полосы прокрутки. Это приведет к тому, что полоса прокрутки будет обновляться при каждом изменении вида в окне.

yscrollcommand

Используется для взаимодействия с вертикальными полосами прокрутки. Дополнительную информацию см. выше.

Параметры этикетки

Следующие опции поддерживаются ярлыками, кнопками и другими виджетами, похожими на кнопки.

Вариант

Описание

текст

Указывает текстовую строку, которая будет отображаться внутри виджета.

textvariable

Указывает имя, значение которого будет использоваться вместо ресурса текстовой опции.

подчеркнуть

Если установлено, указывает индекс (на основе 0) символа для подчеркивания в текстовой строке. Символ подчеркивания используется для активации мнемоники.

изображение

Указывает изображение для отображения. Это список из 1 или более элементов. Первый элемент - это имя изображения по умолчанию. Остальная часть списка - последовательность пар statepec/value, как определено в Style.map(), задающих различные изображения для использования, когда виджет находится в определенном состоянии или комбинации состояний. Все изображения в списке должны иметь одинаковый размер.

соединение

Указывает, как отображать изображение относительно текста, в случае если присутствуют оба параметра - текст и изображение. Допустимые значения:

  • текст: отображение только текста

  • изображение: отображение только изображения

  • верх, низ, лево, право: отображение изображения над, под, слева или справа от текста соответственно.

  • none: значение по умолчанию. отображает изображение, если оно есть, в противном случае - текст.

ширина

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

Параметры совместимости

Вариант

Описание

государство

Может быть установлен в «normal» или «disabled» для управления битом состояния «disabled». Этот параметр доступен только для записи: его установка изменяет состояние виджета, но метод Widget.state() не влияет на этот параметр.

Государства виджетов

Состояние виджета представляет собой битовую карту независимых флагов состояния.

Флаг

Описание

активная

Курсор мыши находится над виджетом, и нажатие кнопки мыши вызывает определенное действие

отключено

Виджет отключен под управлением программы

фокус

Виджет имеет фокус клавиатуры

нажмите

Виджет находится в нажатом состоянии

выбранные

«On», «true» или «current» для таких вещей, как флажки и радиобаттоны.

фон

В Windows и Mac есть понятие «активного» окна или окна переднего плана. Состояние фона устанавливается для виджетов в фоновом окне и снимается для виджетов в окне переднего плана

readonly

Виджет не должен позволять пользователю вносить изменения

альтернативный

Альтернативный формат отображения, специфичный для виджета

Недействительный

Значение виджета недействительно

Спецификация состояния - это последовательность названий состояний, дополнительно дополненная восклицательным знаком, указывающим на то, что бит выключен.

ttk.Widget

Помимо описанных ниже методов, ttk.Widget поддерживает методы tkinter.Widget.cget() и tkinter.Widget.configure().

class tkinter.ttk.Widget
identify(x, y)

Возвращает имя элемента в позиции x y, или пустую строку, если точка не лежит ни в одном элементе.

x и y - это координаты пикселя относительно виджета.

instate(statespec, callback=None, *args, **kw)

Проверяет состояние виджета. Если обратный вызов не указан, возвращает True, если состояние виджета соответствует statespec, и False в противном случае. Если указан обратный вызов, то он вызывается вместе с args, если состояние виджета соответствует statespec.

state(statespec=None)

Изменяет или запрашивает состояние виджета. Если указан statespec, устанавливает состояние виджета в соответствии с ним и возвращает новый statespec, указывающий, какие флаги были изменены. Если statespec не указан, возвращает флаги текущего состояния.

statespec обычно представляет собой список или кортеж.

Комбобокс

Виджет ttk.Combobox сочетает в себе текстовое поле и выпадающий список значений. Этот виджет является подклассом Entry.

Помимо методов, унаследованных от Widget: Widget.cget(), Widget.configure(), Widget.identify(), Widget.instate() и Widget.state(), а также следующих, унаследованных от Entry: Entry.bbox(), Entry.delete(), Entry.icursor(), Entry.index(), Entry.insert(), Entry.selection(), Entry.xview(), у него есть и другие методы, описанные в ttk.Combobox.

Опции

Этот виджет принимает следующие специфические параметры:

Вариант

Описание

экспортный выбор

Булево значение. Если установлено, то выбор виджета связан с выбором оконного менеджера (который можно получить, например, вызвав Misc.selection_get).

оправдать

Указывает, как текст будет выровнен внутри виджета. Один из вариантов: «слева», «по центру» или «справа».

высота

Указывает высоту выпадающего списка в строках.

посткоманда

Сценарий (возможно, зарегистрированный с помощью Misc.register), который вызывается непосредственно перед отображением значений. В нем можно указать, какие значения отображать.

государство

Одно из значений «normal», «readonly» или «disabled». В состоянии «readonly» значение не может быть отредактировано напрямую, и пользователь может только выбрать значение из выпадающего списка. В состоянии «нормально» текстовое поле можно редактировать напрямую. В состоянии «отключено» никакое взаимодействие невозможно.

textvariable

Указывает имя, значение которого связано со значением виджета. При изменении значения, связанного с этим именем, значение виджета обновляется, и наоборот. См. tkinter.StringVar.

значения

Укажите список значений для отображения в раскрывающемся списке.

ширина

Задает целое значение, указывающее желаемую ширину окна ввода, в символах среднего размера шрифта виджета.

Виртуальные мероприятия

Виджеты combobox генерируют виртуальное событие <<ComboboxSelected>>, когда пользователь выбирает элемент из списка значений.

ttk.Combobox

class tkinter.ttk.Combobox
current(newindex=None)

Если указан newindex, устанавливает значение combobox на позицию элемента newindex. В противном случае возвращается индекс текущего значения или -1, если текущего значения нет в списке значений.

get()

Возвращает текущее значение комбобокса.

set(value)

Устанавливает значение комбобокса на значение.

Spinbox

Виджет ttk.Spinbox представляет собой ttk.Entry, дополненный стрелками инкремента и декремента. Его можно использовать для чисел или списков строковых значений. Этот виджет является подклассом Entry.

Помимо методов, унаследованных от Widget: Widget.cget(), Widget.configure(), Widget.identify(), Widget.instate() и Widget.state(), и следующих, унаследованных от Entry: Entry.bbox(), Entry.delete(), Entry.icursor(), Entry.index(), Entry.insert(), Entry.xview(), у него есть и другие методы, описанные в ttk.Spinbox.

Опции

Этот виджет принимает следующие специфические параметры:

Вариант

Описание

с сайта

Плавающее значение. Если установлено, это минимальное значение, до которого будет уменьшаться кнопка декремента. При использовании в качестве аргумента должно быть написано from_, поскольку from является ключевым словом Python.

на

Плавающее значение. Если установлено, это максимальное значение, до которого будет увеличиваться кнопка инкремента.

приращение

Плавающее значение. Задает величину, на которую кнопки увеличения/уменьшения изменяют значение. По умолчанию 1,0.

значения

Последовательность строковых или плавающих значений. Если указано, кнопки увеличения/уменьшения будут циклически перебирать элементы этой последовательности, а не увеличивать или уменьшать числа.

обернуть

Булево значение. Если True, кнопки инкремента и декремента будут циклически переходить от значения to к значению from или от значения from к значению to, соответственно.

формат

Строковое значение. Определяет формат чисел, задаваемых кнопками увеличения/уменьшения. Оно должно иметь вид «%W.Pf», где W - ширина значения, P - точность, а „%“ и „f“ - литералы.

команда

Вызываемая функция Python. Вызывается без аргументов при нажатии любой из кнопок инкремента или декремента.

Виртуальные мероприятия

Виджет spinbox генерирует виртуальное событие <<Increment>>, когда пользователь нажимает <Up>, и виртуальное событие <<Decrement>>, когда пользователь нажимает <Down>.

ttk.Spinbox

class tkinter.ttk.Spinbox
get()

Возвращает текущее значение спинбокса.

set(value)

Устанавливает значение спинбокса на значение.

Блокнот

Виджет Ttk Notebook управляет коллекцией окон и отображает одно из них за раз. Каждое дочернее окно связано с вкладкой, которую пользователь может выбрать, чтобы изменить текущее отображаемое окно.

Опции

Этот виджет принимает следующие специфические параметры:

Вариант

Описание

высота

Если присутствует и больше нуля, задает желаемую высоту области панели (без учета внутренней подложки или вкладок). В противном случае используется максимальная высота всех панелей.

набивка

Указывает количество дополнительного пространства, которое нужно добавить по периметру блокнота. Отступы представляют собой список длиной до четырех элементов слева сверху справа снизу. Если указано менее четырех элементов, то по умолчанию нижняя часть становится верхней, правая - левой, а верхняя - левой.

ширина

Если присутствует и больше нуля, задается желаемая ширина области панели (без учета внутренней подложки). В противном случае используется максимальная ширина всех панелей.

Параметры вкладки

Существуют также специальные опции для вкладок:

Вариант

Описание

государство

Либо «обычный», «отключенный» или «скрытый». Если «отключено», то вкладка не выбирается. Если «скрыта», то вкладка не отображается.

липкий

Указывает, как дочернее окно позиционируется в области панели. Значение представляет собой строку, содержащую ноль или более символов «n», «s», «e» или «w». Каждая буква обозначает сторону (север, юг, восток или запад), к которой будет примыкать дочернее окно, в соответствии с геометрическим менеджером grid().

набивка

Указывает количество дополнительного пространства, которое необходимо добавить между блокнотом и этой панелью. Синтаксис такой же, как и для опции padding, используемой этим виджетом.

текст

Указывает текст, который будет отображаться на вкладке.

изображение

Указывает изображение для отображения на вкладке. См. описание опции изображения в разделе Widget.

соединение

Указывает, как отображать изображение относительно текста, в случае если присутствуют оба параметра - текст и изображение. Юридические значения см. в разделе Label Options.

подчеркнуть

Указывает индекс (на основе 0) символа для подчеркивания в текстовой строке. Подчеркнутый символ используется для активации мнемоники, если вызывается Notebook.enable_traversal().

Идентификаторы вкладок

tab_id, присутствующий в нескольких методах ttk.Notebook, может принимать любую из следующих форм:

  • Целое число от нуля до количества вкладок

  • Имя дочернего окна

  • Позиционная спецификация вида «@x,y», которая идентифицирует вкладку

  • Буквальная строка «current», которая идентифицирует текущую выбранную вкладку

  • Буквальная строка «end», которая возвращает количество вкладок (справедливо только для Notebook.index())

Виртуальные события

Этот виджет генерирует виртуальное событие <<NotebookTabChanged>> после выбора новой вкладки.

ttk.Notebook

class tkinter.ttk.Notebook
add(child, **kw)

Добавляет новую вкладку в блокнот.

Если окно в данный момент управляется блокнотом, но скрыто, оно возвращается на прежнее место.

Список доступных опций см. в разделе Tab Options.

forget(tab_id)

Удаляет вкладку, указанную tab_id, разворачивает и разворачивает связанное с ней окно.

hide(tab_id)

Скрывает вкладку, указанную tab_id.

Вкладка не будет отображаться, но связанное с ней окно останется под управлением блокнота и его конфигурация будет сохранена. Скрытые вкладки можно восстановить с помощью команды add().

identify(x, y)

Возвращает имя элемента вкладки в позиции x, y или пустую строку, если его нет.

index(tab_id)

Возвращает числовой индекс вкладки, указанной tab_id, или общее количество вкладок, если tab_id - это строка «end».

insert(pos, child, **kw)

Вставляет панель в указанную позицию.

pos - это либо строка «end», либо целочисленный индекс, либо имя управляемого дочернего элемента. Если child уже управляется блокнотом, перемещает его на указанную позицию.

Список доступных опций см. в разделе Tab Options.

select(tab_id=None)

Выбирает указанный tab_id.

Будет отображено связанное дочернее окно, а ранее выбранное окно (если оно отличалось) будет удалено. Если tab_id опущен, возвращается имя виджета текущей выбранной панели.

tab(tab_id, option=None, **kw)

Запрос или изменение параметров конкретной tab_id.

Если kw не задан, возвращает словарь значений опций вкладки. Если указано option, возвращает значение этой option. В противном случае устанавливает опции в соответствующие значения.

tabs()

Возвращает список окон, управляемых блокнотом.

enable_traversal()

Включить обход клавиатуры для окна верхнего уровня, содержащего этот блокнот.

Это расширит привязки для окна верхнего уровня, содержащего блокнот, следующим образом:

  • Control-Tab: выбирает вкладку, следующую за выбранной в данный момент.

  • Shift-Control-Tab: выбирает вкладку, предшествующую выбранной в данный момент.

  • Alt-K: где K - мнемонический (подчеркнутый) символ любой вкладки, будет выбрана эта вкладка.

Можно включить обход нескольких блокнотов на одном уровне, включая вложенные блокноты. Однако обход блокнотов работает правильно только в том случае, если все панели имеют блокнот, в котором они находятся, в качестве основного.

Прогрессбар

Виджет ttk.Progressbar отображает статус длительной работы. Он может работать в двух режимах: 1) детерминированный режим, в котором отображается объем выполненной работы по отношению к общему объему работы, которую предстоит выполнить, и 2) неопределенный режим, в котором отображается анимированная индикация, чтобы пользователь знал, что работа продвигается.

Опции

Этот виджет принимает следующие специфические параметры:

Вариант

Описание

ориентироваться

Одно из значений «горизонтальный» или «вертикальный». Определяет ориентацию индикатора выполнения.

длина

Указывает длину длинной оси полосы прогресса (ширина - если горизонтальная, высота - если вертикальная).

режим

Один из «детерминированных» или «индетерминированных».

максимальный

Число, определяющее максимальное значение. По умолчанию равно 100.

значение

Текущее значение индикатора выполнения. В «детерминированном» режиме это значение представляет собой количество выполненной работы. В «неопределенном» режиме оно интерпретируется по модулю максимум; то есть индикатор выполнения завершает один «цикл», когда его значение увеличивается на максимум.

переменная

Имя, связанное со значением опции. Если указано, значение индикатора выполнения автоматически устанавливается на значение этого имени при каждом изменении последнего.

фаза

Опция только для чтения. Виджет периодически увеличивает значение этого параметра, когда его значение больше 0, а в детерминированном режиме - меньше максимума. Эта опция может использоваться текущей темой для создания дополнительных анимационных эффектов.

ttk.Progressbar

class tkinter.ttk.Progressbar
start(interval=None)

Запуск режима автоинкремента: запланировано повторяющееся событие таймера, вызывающее Progressbar.step() каждые интервал миллисекунд. Если значение interval опущено, по умолчанию оно равно 50 миллисекундам.

step(amount=None)

Увеличивает значение индикатора выполнения на количество.

Значение amount по умолчанию равно 1,0, если не указано.

stop()

Остановить режим автоинкремента: отменяет любое повторяющееся событие таймера, инициированное Progressbar.start() для данного индикатора выполнения.

Сепаратор

Виджет ttk.Separator отображает горизонтальную или вертикальную разделительную полосу.

У него нет других методов, кроме тех, что унаследованы от ttk.Widget.

Опции

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

Вариант

Описание

ориентироваться

Одно из значений «горизонтальный» или «вертикальный». Определяет ориентацию разделителя.

Sizegrip

Виджет ttk.Sizegrip (также известный как растущая коробка) позволяет пользователю изменять размер содержащегося в нем окна верхнего уровня, нажимая и перетаскивая ручку.

У этого виджета нет ни особых опций, ни особых методов, кроме тех, что унаследованы от ttk.Widget.

Примечания для конкретной платформы

  • В macOS окна toplevel по умолчанию автоматически включают встроенный захват размера. Добавление Sizegrip безвредно, поскольку встроенный захват будет просто маскировать виджет.

Жучки

  • Если позиция содержащего уровня была задана относительно правой или нижней части экрана (например, ….), виджет Sizegrip не будет изменять размер окна.

  • Этот виджет поддерживает только «юго-восточное» изменение размера.

Treeview

Виджет ttk.Treeview отображает иерархическую коллекцию элементов. Каждый элемент имеет текстовую метку, необязательное изображение и необязательный список значений данных. Значения данных отображаются в последовательных столбцах после метки дерева.

Порядком отображения значений данных можно управлять, установив параметр виджета displaycolumns. Виджет дерева также может отображать заголовки столбцов. Доступ к столбцам может осуществляться по номерам или символическим именам, указанным в опции виджета columns. Смотрите Column Identifiers.

Каждый элемент идентифицируется уникальным именем. Виджет генерирует идентификаторы элементов, если они не предоставлены вызывающей стороной. Существует выделенный корневой элемент с именем {}. Сам корневой элемент не отображается; его дочерние элементы отображаются на верхнем уровне иерархии.

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

Виджет Treeview поддерживает горизонтальную и вертикальную прокрутку, в соответствии с опциями, описанными в Scrollable Widget Options и методами Treeview.xview() и Treeview.yview().

Опции

Этот виджет принимает следующие специфические параметры:

Вариант

Описание

колонки

Список идентификаторов столбцов с указанием количества столбцов и их имен.

displaycolumns

Список идентификаторов столбцов (символьных или целочисленных индексов), определяющих, какие столбцы данных отображаются и в каком порядке они появляются, или строка «#all».

высота

Указывает количество строк, которые должны быть видны. Примечание: запрашиваемая ширина определяется из суммы ширин столбцов.

набивка

Определяет внутреннюю подложку виджета. Подложка представляет собой список из четырех спецификаций длины.

selectmode

Управляет тем, как встроенные привязки классов управляют выбором. Одно из значений «расширенный», «просмотр» или «нет». Если установлено значение «extended» (по умолчанию), можно выбрать несколько элементов. Если «browse», то за один раз будет выбран только один элемент. Если «нет», выбор не будет изменен.

Обратите внимание, что код приложения и привязки тегов могут устанавливать выбор по своему усмотрению, независимо от значения этого параметра.

показать

Список, содержащий ноль или более из следующих значений, определяющих, какие элементы дерева следует отобразить.

  • tree: отображать метки деревьев в колонке #0.

  • заголовки: отображение строки заголовков.

По умолчанию используется «заголовки дерева», т. е. отображение всех элементов.

Примечание: Столбец #0 всегда относится к столбцу дерева, даже если не указано show=«tree».

Опции товара

Для элементов в командах вставки и виджета элемента можно указать следующие параметры элемента.

Вариант

Описание

текст

Текстовая метка для отображения элемента.

изображение

Изображение Tk, отображаемое слева от ярлыка.

значения

Список значений, связанных с элементом.

Каждый элемент должен иметь столько же значений, сколько колонок опций виджета. Если значений меньше, чем столбцов, оставшиеся значения считаются пустыми. Если значений больше, чем столбцов, лишние значения игнорируются.

открыть

Значение True/False, указывающее, должны ли дочерние элементы элемента отображаться или быть скрытыми.

теги

Список тегов, связанных с этим элементом.

Параметры тега

Для тегов могут быть указаны следующие параметры:

Вариант

Описание

передний план

Определяет цвет переднего плана текста.

фон

Указывает цвет фона ячейки или элемента.

шрифт

Указывает шрифт, который будет использоваться при рисовании текста.

изображение

Указывает изображение элемента, если опция изображения элемента пуста.

Идентификаторы столбцов

Идентификаторы столбцов принимают любую из следующих форм:

  • Символьное имя из списка столбцов опции.

  • Целое число n, указывающее на n-й столбец данных.

  • Строка вида #n, где n - целое число, задающее n-ый столбец отображения.

Примечания:

  • Значения параметров элемента могут отображаться не в том порядке, в котором они хранятся.

  • Колонка #0 всегда ссылается на колонку дерева, даже если не указано show=«tree».

Номер столбца данных - это индекс списка значений опций элемента; номер столбца отображения - это номер столбца в дереве, в котором отображаются значения. Метки дерева отображаются в столбце #0. Если опция displaycolumns не установлена, то столбец данных n отображается в столбце #n+1. Опять же, столбец #0 всегда относится к столбцу дерева.

Виртуальные события

Виджет Treeview генерирует следующие виртуальные события.

Событие

Описание

<<TreeviewSelect>>

Генерируется при каждом изменении выбора.

<<TreeviewOpen>>

Генерируется непосредственно перед установкой для элемента фокуса значения open=True.

<<TreeviewClose>>

Генерируется сразу после установки для элемента фокуса значения open=False.

Для определения затронутого элемента или элементов можно использовать методы Treeview.focus() и Treeview.selection().

ttk.Treeview

class tkinter.ttk.Treeview
bbox(item, column=None)

Возвращает ограничительную рамку (относительно окна виджета просмотра дерева) указанного элемента в виде (x, y, width, height).

Если указан столбец, возвращается ограничивающая рамка этой ячейки. Если элемент не виден (т. е. если он является потомком закрытого элемента или прокручивается за пределы экрана), возвращается пустая строка.

get_children(item=None)

Возвращает список дочерних элементов, принадлежащих item.

Если item не указан, возвращает корневые дочерние элементы.

set_children(item, *newchildren)

Заменяет дочерние элементы item на newchildren.

Дети, присутствующие в item и не присутствующие в newchildren, удаляются из дерева. Ни один элемент в newchildren не может быть предком item. Обратите внимание, что если не указывать newchildren, то дочерние элементы item будут отсоединены.

column(column, option=None, **kw)

Запрос или изменение параметров для указанного столбца.

Если kw не задано, возвращается dict значений опций столбца. Если указано option, то возвращается значение для этой option. В противном случае устанавливает опции в соответствующие значения.

Возможны следующие варианты/значения:

id

Возвращает имя столбца. Этот параметр доступен только для чтения.

якорь: Одно из стандартных значений якоря Tk.

Указывает, как текст в этом столбце должен быть выровнен по отношению к ячейке.

minwidth: ширина

Минимальная ширина столбца в пикселях. Виджет древовидного просмотра не будет делать столбец меньше, чем указано в этом параметре, когда виджет изменяет размер или пользователь перетаскивает столбец.

стретч: True/False

Указывает, должна ли ширина колонки изменяться при изменении размера виджета.

width: width

Ширина столбца в пикселях.

Чтобы настроить колонку дерева, вызовите эту команду с column = «#0».

delete(*items)

Удаляет все указанные элементы и всех их потомков.

Корневой элемент не может быть удален.

detach(*items)

Отсоединяет все указанные элементы от дерева.

Элементы и все их потомки по-прежнему присутствуют и могут быть повторно вставлены в другую точку дерева, но отображаться не будут.

Корневой элемент не может быть отсоединен.

exists(item)

Возвращает True, если указанный элемент присутствует в дереве.

focus(item=None)

Если указано item, устанавливает элемент фокуса на item. В противном случае возвращается текущий элемент фокуса или „“, если его нет.

heading(column, option=None, **kw)

Запрос или изменение параметров заголовка для указанного столбца.

Если kw не задано, возвращается dict значений опций заголовка. Если указано option, то возвращается значение для этого option. В противном случае устанавливает опции в соответствующие значения.

Возможны следующие варианты/значения:

текст: текст

Текст для отображения в заголовке столбца.

изображение: imageName

Указывает изображение для отображения справа от заголовка столбца.

якорь: якорь

Указывает, как должен быть выровнен текст заголовка. Одно из стандартных значений якоря Tk.

команда: обратный вызов

Обратный вызов, который будет вызван при нажатии на ярлык заголовка.

Чтобы настроить заголовок столбца дерева, вызовите эту команду с column = «#0».

identify(component, x, y)

Возвращает описание указанного компонента в точке, заданной x и y, или пустую строку, если в данной позиции нет такого компонента.

identify_row(y)

Возвращает идентификатор элемента, находящегося в позиции y.

identify_column(x)

Возвращает идентификатор столбца данных ячейки в позиции x.

Столбец дерева имеет идентификатор #0.

identify_region(x, y)

Возвращает одно из:

регион

значение

рубрика

Территория зарослей.

сепаратор

Пробел между заголовками двух колонок.

дерево

Дерево.

ячейка

Ячейка данных.

Доступность: Tk 8.6.

identify_element(x, y)

Возвращает элемент в позиции x, y.

Доступность: Tk 8.6.

index(item)

Возвращает целочисленный индекс элемента item в списке дочерних элементов его родителя.

insert(parent, index, iid=None, **kw)

Создает новый элемент и возвращает идентификатор созданного элемента.

parent - это идентификатор родительского элемента, или пустая строка для создания нового элемента верхнего уровня. index - целое число или значение «end», указывающее, в какое место в списке дочерних элементов родителя вставлять новый элемент. Если index меньше или равен нулю, новый узел вставляется в начало; если index больше или равен текущему количеству дочерних элементов, он вставляется в конец. Если указан iid, он используется в качестве идентификатора элемента; iid не должен уже существовать в дереве. В противном случае генерируется новый уникальный идентификатор.

Список доступных опций см. в разделе Item Options.

item(item, option=None, **kw)

Запрос или изменение параметров для указанного элемента.

Если опции не указаны, возвращается dict с опциями/значениями для элемента. Если указано option, то возвращается значение этой опции. В противном случае устанавливает опции в соответствующие значения, заданные kw.

move(item, parent, index)

Перемещает item на позицию index в списке дочерних элементов parent.

Запрещено перемещать элемент под одного из его потомков. Если index меньше или равен нулю, элемент перемещается в начало; если больше или равен числу дочерних элементов, он перемещается в конец. Если item был отсоединен, он будет присоединен снова.

next(item)

Возвращает идентификатор следующего брата или сестры элемента item, или „“, если элемент item является последним ребенком своего родителя.

parent(item)

Возвращает идентификатор родителя элемента item или „“, если элемент item находится на верхнем уровне иерархии.

prev(item)

Возвращает идентификатор предыдущего брата элемента item или „“, если элемент item является первым ребенком своего родителя.

reattach(item, parent, index)

Псевдоним для Treeview.move().

see(item)

Убедитесь, что item виден.

Устанавливает для всех предков item значение True и при необходимости прокручивает виджет так, чтобы item оказался в видимой части дерева.

selection()

Возвращает кортеж выбранных элементов.

Изменено в версии 3.8: selection() больше не принимает аргументов. Для изменения состояния выбора используйте следующие методы выбора.

selection_set(*items)

items становится новым выбором.

Изменено в версии 3.6: Элементы можно передавать как отдельные аргументы, а не только как один кортеж.

selection_add(*items)

Добавьте элементы в выборку.

Изменено в версии 3.6: Элементы можно передавать как отдельные аргументы, а не только как один кортеж.

selection_remove(*items)

Удалить элементы из выбора.

Изменено в версии 3.6: Элементы можно передавать как отдельные аргументы, а не только как один кортеж.

selection_toggle(*items)

Переключает состояние выбора каждого элемента в items.

Изменено в версии 3.6: Элементы можно передавать как отдельные аргументы, а не только как один кортеж.

set(item, column=None, value=None)

С одним аргументом возвращает словарь пар столбец/значение для указанного элемента. С двумя аргументами возвращает текущее значение указанного столбца. С тремя аргументами устанавливает значение данного столбца в данном элементе в указанное значение.

tag_bind(tagname, sequence=None, callback=None)

Привязывает обратный вызов для заданной последовательности событий к тегу tagname. Когда событие доставляется элементу, вызываются обратные вызовы для каждого из вариантов тегов элемента.

tag_configure(tagname, option=None, **kw)

Запрос или изменение параметров для указанного tagname.

Если kw не задан, возвращает dict настроек опций для tagname. Если указано option, возвращает значение этой option для указанного tagname. В противном случае устанавливает опции в соответствующие значения для данного tagname.

tag_has(tagname, item=None)

Если указано item, возвращает 1 или 0 в зависимости от того, имеет ли указанный item заданное tagname. В противном случае возвращается список всех элементов, имеющих указанный тег.

Доступность: Tk 8.6

xview(*args)

Запрашивает или изменяет горизонтальное положение древовидного экрана.

yview(*args)

Запрашивает или изменяет вертикальное положение древовидного экрана.

Ttk Styling

Каждому виджету в ttk назначается стиль, который определяет набор элементов, составляющих виджет, и способ их расположения, а также динамические и стандартные настройки параметров элементов. По умолчанию имя стиля совпадает с именем класса виджета, но оно может быть переопределено параметром стиля виджета. Если вы не знаете имя класса виджета, воспользуйтесь методом Misc.winfo_class() (somewidget.winfo_class()).

См.также

Tcl’2004 conference presentation

Этот документ объясняет, как работает движок темы

class tkinter.ttk.Style

Этот класс используется для работы с базой данных стилей.

configure(style, query_opt=None, **kw)

Запрос или установка значения по умолчанию для указанного параметра(ов) в style.

Каждый ключ в kw - это опция, а каждое значение - это строка, определяющая значение этой опции.

Например, чтобы изменить каждую кнопку по умолчанию на плоскую кнопку с подложкой и другим цветом фона:

from tkinter import ttk
import tkinter

root = tkinter.Tk()

ttk.Style().configure("TButton", padding=6, relief="flat",
   background="#ccc")

btn = ttk.Button(text="Sample")
btn.pack()

root.mainloop()
map(style, query_opt=None, **kw)

Запрашивает или устанавливает динамические значения указанной опции (опций) в style.

Каждый ключ в kw - это опция, а каждое значение должно быть списком или кортежем (как правило), содержащим statepecs, сгруппированные в кортежи, списки или другие предпочтения. Стейтспек - это соединение одного или нескольких состояний, а затем значения.

Пример может сделать это более понятным:

import tkinter
from tkinter import ttk

root = tkinter.Tk()

style = ttk.Style()
style.map("C.TButton",
    foreground=[('pressed', 'red'), ('active', 'blue')],
    background=[('pressed', '!disabled', 'black'), ('active', 'white')]
    )

colored_btn = ttk.Button(text="Test", style="C.TButton").pack()

root.mainloop()

Обратите внимание, что порядок следования (states, value) для опции имеет значение. Например, если изменить порядок на [('active', 'blue'), ('pressed', 'red')] в опции foreground, то в результате виджет будет иметь синий цвет переднего плана, когда он находится в активном или нажатом состоянии.

lookup(style, option, state=None, default=None)

Возвращает значение, указанное для option в style.

Если указано state, ожидается, что это будет последовательность из одного или нескольких состояний. Если задан аргумент default, он используется в качестве запасного значения в случае, если спецификация опции не найдена.

Чтобы проверить, какой шрифт используется в кнопке по умолчанию, выполните следующие действия:

from tkinter import ttk

print(ttk.Style().lookup("TButton", "font"))
layout(style, layoutspec=None)

Определяет макет виджета для заданного стиля. Если layoutspec опущено, возвращается спецификация макета для данного стиля.

layoutspec, если он указан, должен быть списком или другим типом последовательности (исключая строки), где каждый элемент должен быть кортежем, первый элемент - это имя макета, а второй элемент должен иметь формат, описанный в Layouts.

Чтобы понять формат, посмотрите следующий пример (он не предназначен для выполнения каких-либо полезных действий):

from tkinter import ttk
import tkinter

root = tkinter.Tk()

style = ttk.Style()
style.layout("TMenubutton", [
   ("Menubutton.background", None),
   ("Menubutton.button", {"children":
       [("Menubutton.focus", {"children":
           [("Menubutton.padding", {"children":
               [("Menubutton.label", {"side": "left", "expand": 1})]
           })]
       })]
   }),
])

mbtn = ttk.Menubutton(text='Text')
mbtn.pack()
root.mainloop()
element_create(elementname, etype, *args, **kw)

Создает новый элемент в текущей теме с заданным типом, который должен быть либо «image», либо «from», либо «vsapi». Последний вариант доступен только в Tk 8.6 под Windows.

Если используется «image», то args должно содержать имя изображения по умолчанию, за которым следуют пары statepec/value (это и есть imagespec), а kw может содержать следующие опции:

border=padding

padding - это список из четырех целых чисел, задающих левую, верхнюю, правую и нижнюю границы соответственно.

высота=высота

Указывает минимальную высоту элемента. Если она меньше нуля, по умолчанию используется высота базового изображения.

padding=падинг

Определяет внутреннюю подложку элемента. По умолчанию принимает значение border, если не указано.

липкий=спец

Указывает, как изображение будет размещено в конечной посылке. spec содержит ноль или более символов «n», «s», «w» или «e».

ширина=ширина

Указывает минимальную ширину элемента. Если она меньше нуля, по умолчанию используется ширина базового изображения.

Пример:

img1 = tkinter.PhotoImage(master=root, file='button.png')
img1 = tkinter.PhotoImage(master=root, file='button-pressed.png')
img1 = tkinter.PhotoImage(master=root, file='button-active.png')
style = ttk.Style(root)
style.element_create('Button.button', 'image',
                     img1, ('pressed', img2), ('active', img3),
                     border=(2, 4), sticky='we')

Если в качестве значения etype используется «from», element_create() будет клонировать существующий элемент. Ожидается, что args будет содержать имя темы, из которой будет клонироваться элемент, и, опционально, элемент для клонирования. Если элемент для клонирования не указан, будет использован пустой элемент. kw отбрасывается.

Пример:

style = ttk.Style(root)
style.element_create('plain.background', 'from', 'default')

Если в качестве значения etype используется «vsapi», то element_create() создаст новый элемент в текущей теме, визуальный вид которого будет нарисован с помощью Microsoft Visual Styles API, отвечающего за тематические стили в Windows XP и Vista. Ожидается, что args будет содержать класс и часть Visual Styles, как указано в документации Microsoft, а затем необязательную последовательность кортежей состояний ttk и соответствующее значение состояния Visual Styles API. kw может иметь следующие опции:

padding=падинг

Укажите внутреннюю прокладку элемента. padding - это список из четырех целых чисел, задающих левую, верхнюю, правую и нижнюю величины подбивки соответственно. Если указано менее четырех элементов, то по умолчанию нижняя часть становится верхней, правая - левой, а верхняя - левой. Другими словами, список из трех чисел задает левую, вертикальную и правую отступы; список из двух чисел задает горизонтальную и вертикальную отступы; одиночное число задает одинаковые отступы по всему периметру виджета. Этот параметр нельзя смешивать с другими параметрами.

поля = отступы

Определяет внешнюю набивку элементов. padding - это список из четырех целых чисел, задающих величины левой, верхней, правой и нижней набивки соответственно. Этот параметр нельзя смешивать с другими параметрами.

ширина=ширина

Указывает ширину элемента. Если этот параметр установлен, то API визуальных стилей не будет запрашиваться на предмет рекомендуемого размера элемента. Если эта опция задана, то height также должен быть задан. Параметры width и height нельзя смешивать с параметрами padding или margins.

высота=высота

Указывает высоту элемента. См. комментарии для width.

Пример:

style = ttk.Style(root)
style.element_create('pin', 'vsapi', 'EXPLORERBAR', 3, [
                     ('pressed', '!selected', 3),
                     ('active', '!selected', 2),
                     ('pressed', 'selected', 6),
                     ('active', 'selected', 5),
                     ('selected', 4),
                     ('', 1)])
style.layout('Explorer.Pin',
             [('Explorer.Pin.pin', {'sticky': 'news'})])
pin = ttk.Checkbutton(style='Explorer.Pin')
pin.pack(expand=True, fill='both')

Изменено в версии 3.13: Добавлена поддержка фабрики элементов «vsapi».

element_names()

Возвращает список элементов, определенных в текущей теме.

element_options(elementname)

Возвращает список опций elementname.

theme_create(themename, parent=None, settings=None)

Создайте новую тему.

Ошибкой будет, если themename уже существует. Если указано parent, новая тема унаследует стили, элементы и макеты от родительской темы. Если присутствует settings, то ожидается, что они будут иметь тот же синтаксис, что и для theme_settings().

theme_settings(themename, settings)

Временно устанавливает текущую тему на themename, применяет указанные настройки, а затем восстанавливает предыдущую тему.

Каждый ключ в settings - это стиль, а каждое значение может содержать ключи „configure“, „map“, „layout“ и „element create“, и ожидается, что они будут иметь тот же формат, который задается методами Style.configure(), Style.map(), Style.layout() и Style.element_create() соответственно.

В качестве примера давайте немного изменим Combobox для темы по умолчанию:

from tkinter import ttk
import tkinter

root = tkinter.Tk()

style = ttk.Style()
style.theme_settings("default", {
   "TCombobox": {
       "configure": {"padding": 5},
       "map": {
           "background": [("active", "green2"),
                          ("!disabled", "green4")],
           "fieldbackground": [("!disabled", "green3")],
           "foreground": [("focus", "OliveDrab1"),
                          ("!disabled", "OliveDrab2")]
       }
   }
})

combo = ttk.Combobox().pack()

root.mainloop()
theme_names()

Возвращает список всех известных тем.

theme_use(themename=None)

Если themename не задано, возвращает используемую тему. В противном случае устанавливает текущую тему на themename, обновляет все виджеты и выдает событие <<ThemeChanged>>.

Макеты

Макет может быть просто None, если он не принимает никаких опций, или диктой опций, определяющих, как расположить элемент. Механизм компоновки использует упрощенную версию менеджера геометрии пакетов: при наличии начальной полости каждому элементу выделяется участок.

Возможны следующие варианты/значения:

*С какой стороны

Указывает, с какой стороны полости размещать элемент; один из вариантов - сверху, справа, снизу или слева. Если это значение опущено, элемент занимает всю полость.

стихи: nswe

Указывает место размещения элемента в выделенном ему участке.

Единица: 0 или 1

Если установлено значение 1, то элемент и все его потомки рассматриваются как один элемент для целей Widget.identify() и т. д. Используется для таких вещей, как большие пальцы с ручками на полосе прокрутки.

дети: [sublayout… ]

Указывает список элементов, которые необходимо разместить внутри элемента. Каждый элемент представляет собой кортеж (или другой тип последовательности), где первый элемент - это имя макета, а второй - Layout.