tkinter.ttk — Tk тематические виджеты

Исходный код: Lib/tkinter/ttk.py.


Модуль tkinter.ttk предоставляет доступ к набору тематических виджетов Tk, представленному в Tk 8.5. Если Python не был скомпилирован под Tk 8.5, то доступ к этому модулю можно получить, если установлен Tile. Первый метод с использованием 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 придает приложению улучшенный внешний вид и ощущение. Как обсуждалось выше, существуют различия в том, как кодируется стилизация.

Тк код:

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» для таких вещей, как кнопки Checkbutton и radiobutton

фон

В 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.

Опции

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

Вариант

Описание

exportselection

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

обосновать

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

высота

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

посткоманда

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

государство

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

textvariable

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

значения

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

ширина

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

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

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

ttk.Combobox

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

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

get()

Возвращает текущее значение combobox.

set(value)

Устанавливает значение combobox на значение.

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 управляет коллекцией окон и отображает одно из них за один раз. Каждое дочернее окно связано с вкладкой, которую пользователь может выбрать, чтобы изменить текущее отображаемое окно.

Опции

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

Вариант

Описание

высота

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

набивка

Указывает количество дополнительного пространства, которое необходимо добавить по внешней стороне блокнота. Подкладка представляет собой список длиной до четырех спецификаций left top right bottom. Если указано менее четырех элементов, то по умолчанию нижняя часть равна верхней, правая часть равна левой, а верхняя часть равна левой.

ширина

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

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

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

Вариант

Описание

государство

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

липкий

Указывает, как дочернее окно позиционируется в области панели. Значение представляет собой строку, содержащую ноль или более символов «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() каждые интервал миллисекунд. Если это значение опущено, интервал по умолчанию равен 50 миллисекундам.

step(amount=None)

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

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

stop()

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

Сепаратор

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

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

Опции

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

Вариант

Описание

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

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

Sizegrip

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

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

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

  • В macOS окна верхнего уровня по умолчанию автоматически включают встроенный захват размера. Добавление 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)

Возвращает граничную область (относительно окна виджета treeview) указанного элемента в виде (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.

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

  • минимальная ширина: ширина

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

  • растягиваться: True/False

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

  • ширина: ширина

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

Чтобы настроить колонку дерева, вызовите эту команду с 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)

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

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

move(item, parent, index)

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

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

next(item)

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

parent(item)

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

prev(item)

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

reattach(item, parent, index)

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

see(item)

Убедитесь, что элемент виден.

Устанавливает для всех предков item опцию open в 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. В противном случае возвращается список всех элементов, имеющих указанный тег.

Доступность: Тк 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)

Запрос или установка динамических значений указанного(ых) параметра(ов) в стиле.

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

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

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()

Обратите внимание, что порядок последовательностей (состояния, значение) для опции имеет значение, например, если изменить порядок на [('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.6a для Windows XP и Vista и здесь не описывается.

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

  • border=padding

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

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

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

  • padding= padding

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

  • липкий=спец

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

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

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

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

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.

Вернуться на верх