tkinter.ttk — Стилизуемые виджеты Tk


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

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

См.также

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

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

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

from tkinter import ttk

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

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 для улучшения эффектов стиля.

См.также

Преобразование существующих приложений для использования Tile виджетов
Монография (с использованием терминологии 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.

Widget

ttk.Widget определяет стандартные параметры и методы, поддерживаемые стилизуемыми Tk виджетами, и не должен создаваться напрямую.

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

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

Опция Описание
class Задаёт класс окна. Класс используется при запросе из БД опции для других опций окна, для определения привязок по умолчанию для окна и для выбора формата и стиля виджета по умолчанию. Этот параметр доступен только для чтения и может быть указан только при создании окна.
cursor Указывает курсор мыши, который будет использоваться для виджета. Если задана пустая строка (по умолчанию), курсор наследуется для родительского виджета.
takefocus Определяет, принимает ли окно фокус во время обхода клавиатуры. Возвращается 0, 1 или пустая строка. Если возвращён 0, это означает, что окну следует полностью пропустить во время обхода клавиатуры. Если 1, это означает, что окно должно получать фокус ввода, пока оно доступно для просмотра. Пустая строка означает, что сценарии обхода принимают решение о том, стоит ли фокусироваться на окне.
style Может использоваться для указания собственного стиля виджета.

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

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

Опция Описание
xscrollcommand

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

При изменении вида в окне виджета виджет генерирует Tcl команду на основе команды прокрутки.

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

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

Опции Label

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

Опция Описание
text Указывает текстовую строку, отображаемую внутри виджета.
textvariable Указывает имя, значение которого будет использоваться вместо ресурса текстовой опции.
underline Если задана, указывает индекс (на основе 0) символа для подчёркивания в текстовой строке. Символ подчёркивания используется для мнемонической активации.
image Задаёт изображение для отображения. Это список из 1 или более элементов. Первый элемент является именем изображения по умолчанию. Остальная часть списка, если последовательность пар statespec/value определяется Style.map(), указывая различные изображения для использования, когда виджет находится в определённом состояние или комбинации состояний. Все изображения в списке должны иметь одинаковый размер.
compound

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

  • text: отображать только текст
  • image: отображать только изображение
  • top, bottom, left, right: отображать изображение вверху, внизу,слева или справа от текста соответственно.
  • none: по умолчанию. Отображать изображение, если оно имеется, в противном случае текст.
width Если значение больше нуля, указывает, сколько места в символьной ширине следует выделить для текстовой метки. Если меньше нуля, определяет минимальную ширину. Если значение равно нулю или не указано, используется естественная ширина текстовой метки.

Опции совместимости

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

Состояние виджета

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

Флаг Описание
active Курсор мыши находится над виджетом, и нажатие кнопки мыши вызовет некоторые действия
disabled Виджет отключён от программного управления
focus Виджет захватил фокус клавиатуры
pressed Выполняется нажатие виджета
selected «On», «true» или «current» для таких вещей, как Checkbuttons и radiobuttons
background В Windows и Mac есть понятие «активного» или переднего окна. background состояние устанавливается для виджетов в фоновом окне и сбрасывается для виджетов в окне переднего плана
readonly Виджет не должен разрешать изменение пользователем
alternate Специфичный для виджета альтернативного формата отображения
invalid Недопустимое значение виджета

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

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 в противном случае. Если указан обратный вызов, то он вызывается с аргументами, если состояние виджета соответствует statespec.

state(statespec=None)

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

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

Combobox

Виджет 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).
justify Указывает способ выравнивания текста в пределах графического элемента. Одно из «left», «center» или «right».
height Указывает высоту раскрывающегося списка в строках.
postcommand Сценарий (возможно, зарегистрированный в Misc.register), вызываемый непосредственно перед отображением значения. Он может указывать отображаемые значения.
state Одно из значений «normal», «readonly» или «disabled». В состоянии «readonly» значение не может редактироваться напрямую, и пользователь может выбрать значения только из раскрывающегося списка. В состоянии «normal» текстовое поле является непосредственно редактируемым. В состоянии «disabled» взаимодействие невозможно.
textvariable Задаёт имя, значение которого связана с значением виджета. При каждом изменении значения, связанного с этим именем, значение виджета обновляется, и наоборот. См. tkinter.StringVar.
values Указывает список значений, отображаемых в выпадающем списке.
width Задаёт целое значение, указывающее требуемую ширину окна ввода, в символах среднего размера шрифта виджета.

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

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

ttk.Combobox

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

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

get()

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

set(value)

Устанавливает значение поля combobox в 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 Float значение. Если установлено, это минимальное значение, до которого будет уменьшаться кнопка уменьшения. Должна быть написана как from_ при использовании в качестве аргумента, так как from является ключевым словом Python.
to Float значение. Если установлено, это максимальное значение, до которого будет увеличиваться кнопка увеличения.
increment Float значение. Определяет величину изменения значение с помощью кнопок увеличения/уменьшения. По умолчанию - 1.0.
values Строковая последовательность или float значение. Если указано, кнопки увеличения/уменьшения будут циклически перемещаться по элементам в этой последовательности вместо увеличения или уменьшения чисел.
wrap Булево значение. При True кнопки увеличения и уменьшения будут циклически переходить от to к значению from, значение или from значение к to значению соответственно.
format Строковое значение. Здесь указывается формат чисел, задаваемый кнопками увеличения/уменьшения. Она должна иметь вид «%W.Pf», где W - заполненная ширина значения, P - точность, а „%“ и „f“ - литерал.
command Вызываемый Python. Будет вызываться без аргументов при каждом нажатии кнопки увеличения или уменьшения.

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

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

ttk.Spinbox

class tkinter.ttk.Spinbox
get()

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

set(value)

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

Notebook

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

Опции

Данный виджет принимает следующие специальные параметры:

Опция Описание
height Если значение больше нуля, указывает требуемую высоту области панели (не включая внутреннее заполнение или вкладки). В противном случае будет использоваться максимальная высота всех панелей.
padding Указывает объём дополнительного пространства, добавляемого с внешней стороны notebook. Заполнение представляет собой список до четырёх спецификаций длины слева, верх, справа, вниз. Если указано менее четырёх элементов, то нижний элемент по умолчанию - сверху, правый элемент по умолчанию - слева, а верхний элемент по умолчанию - слева.
width Если передана и больше нуля, задаёт требуемую ширину области панели (не включая внутреннее заполнение). В противном случае будет использоваться максимальная ширина всех панелей.

Опции Tab

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

Опция Описание
state Либо «normal», «disabled» или «hidden». Если значение «disabled» (отключено), вкладка не может быть выбрана. Если «hidden», вкладка не отображается.
sticky Определяет расположение дочернего окна в области панели. Значение является строкой, содержащим ноль или более символов «n», «s», «e» или «w». Каждая буква относится к стороне (север, юг, восток или запад), к которой будет прилипать дочернее окно, согласно менеджеру геометрии grid().
padding Указывает объем дополнительного пространства, добавляемого между notebook и этой панелью. Синтаксис аналогичен параметру, используемый этим виджетом.
text Задаёт текст для отображения на вкладке.
image Задаёт изображение для отображения на вкладке. См. опцию image, описанную в Widget.
compound Указывает, как отображать изображение относительно текста, если присутствуют и текст, и изображение. См. Опции Label для получения допустимых значений.
underline Указывает индекс (на основе 0) символ для подчёркивания в текстовой строке. Символ подчёркивания используется для включения мнемоники при вызове Notebook.enable_traversal().

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

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

  • Целое число от нуля до количества вкладок
  • Имя дочернего окна
  • Позиционная спецификация формы «@x,y», которая идентифицирует вкладку
  • Литеральная строка «current», которая идентифицирует текущую выбранную вкладку
  • Литеральная строка «end», которая возвращает количество вкладок (действительно только для Notebook.index())

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

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

ttk.Notebook

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

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

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

Список доступных опций см. в Опции Tab.

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», либо целочисленный индекс, либо имя управляемого дочернего элемента. Если notebook уже управляет child, перемещает его в указанную позицию.

Список доступных опций см. в Опции Tab.

select(tab_id=None)

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

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

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

Запрашивает или изменяет параметры tab_id.

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

tabs()

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

enable_traversal()

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

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

  • Control-Tab: выбирает вкладку, следующую за текущей выбранной.
  • Shift-Control-Tab: выбирает вкладку, предшествующую текущей выбранной.
  • Alt-K: где K — мнемонический (подчёркнутый) символ любой вкладки, будет выбрана вкладка.

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

Progressbar

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

Опции

Данный виджет принимает следующие специальные опции:

Опция Описание
orient Одно из «horizontal» или «vertical». Указывает ориентацию индикатора выполнения.
length Указывает длину длинной оси индикатора выполнения (ширина по горизонтали, высота по вертикали).
mode Одно из «determinate» или «indeterminate».
maximum Число, указывающее максимальное значение. По умолчанию - 100.
value Текущее значение индикатора выполнения. В «determinate» режиме это представляет объем выполненной работы. В «indeterminate» режиме он интерпретируется как maximum по модулю; то есть индикатор выполнения завершает один «цикл», когда его значение увеличивается на maximum.
variable Имя, связанное с значением опции. Если указано, значение индикатора выполнения автоматически устанавливается в значение этого имени при каждом изменении последнего.
phase Опция только для чтения. Виджет периодически увеличивает значение этого параметра, когда его значение больше 0 и в определённом режиме меньше максимума. Опция может использоваться текущей темой для обеспечения дополнительных анимационных эффектов.

ttk.Progressbar

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

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

step(amount=None)

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

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

stop()

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

Separator

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

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

Опции

Данный виджет принимает следующую опцию:

Опция Описание
orient Одно из «horizontal» или «vertical». Указывает ориентацию разделителя.

Sizegrip

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

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

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

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

Ошибки

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

Treeview

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

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

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

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

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

Опции

Данный виджет принимает следующие специальные опции:

Опция Описание
columns Список идентификаторов столбцов, указывающий количество столбцов и их имена.
displaycolumns Список идентификаторов столбцов (символьные или целочисленные индексы), указывающий, какие столбцы данных отображаются и в каком порядке они отображаются, или строка «#all».
height Указывает количество строк, которые должны быть видны. Примечание: требуемая ширина определяется из суммы значений ширины столбца.
padding Определяет внутреннее заполнение для графического элемента. Заполнение представляет собой список до четырёх спецификаций длины.
selectmode

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

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

show

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

  • tree: отображать метки дерева в столбце #0.
  • headings: отобразить строку заголовка.

По умолчанию используется «tree headings», т.е. отображаются все элементы.

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

Опции элемента

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

Опция Описание
text Текстовая метка, отображаемая для элемента.
image Tk изображение, отображаемое слева от метки.
values

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

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

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

Опции Tag

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

Опция Описание
foreground Задаёт цвет переднего плана текста.
background Задаёт цвет фона ячейки или элемента.
font Указывает шрифт, используемый при рисовании текста.
image Задает изображение элемента, если параметр изображения элемента пуст.

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

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

  • Символьное имя из опции списка столбцов.
  • Целое число 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)

Возвращает ограничивающую рамку (относительно окна древовидного виджета) указанного item в форме (x, y, ширина, высота).

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

get_children(item=None)

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

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

set_children(item, *newchildren)

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

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

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

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

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

Допустимые параметры/значения:

  • id
    Возвращает имя столбца. Это вариант только для чтения.
  • anchor: одно из стандартных значений привязки Tk.
    Указывает, как текст в этом столбце должен быть выровнен по отношению к ячейке.
  • minwidth: ширина
    Минимальная ширина столбца в пикселях. Виджет treeview не сделает столбец меньше, чем указано в этом параметре, когда размер виджета изменяется или пользователь перетаскивает столбец.
  • stretch: True/False
    Указывает, следует ли корректировать ширину столбца при изменении размера виджета.
  • width: ширина
    Ширина столбца в пикселях.

Чтобы настроить столбец дерева, вызвать его с помощью column = «#0»

delete(*items)

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

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

detach(*items)

Отменяет связь всех указанных items с деревом.

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

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

exists(item)

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

focus(item=None)

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

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

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

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

Допустимые параметры/значения:

  • text: text
    Текст, отображаемый в заголовке столбца.
  • image: imageName
    Указывает изображение, которое будет отображаться справа от заголовка столбца.
  • anchor: anchor
    Указывает, как должен быть выровнен текст заголовка. Одно из стандартных значений привязки Tk.
  • command: callback
    Обратный вызов, который будет вызываться при нажатии метки заголовка.

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

identify(component, x, y)

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

identify_row(y)

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

identify_column(x)

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

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

identify_region(x, y)

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

регион значение
heading Область заголовка дерева.
separator Пробел между заголовками двух столбцов.
tree Область дерева.
cell Ячейка данных.

Наличие: Тк 8.6.

identify_element(x, y)

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

Наличие: Тк 8.6.

index(item)

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

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

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

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

См. Опции элемента для получения списка доступных точек.

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

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

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

move(item, parent, index)

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

Недопустимо перемещать элемент под одним из его потомков. Если index меньше или равен нулю, item перемещается в начало; если больше или равно количеству дочерних элементов, он перемещается в конец. Если 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: items можно передавать как отдельные аргументы, а не только как один кортеж.

selection_add(*items)

Добавить в выделение items.

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

selection_remove(*items)

Удалить items из выделения.

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

selection_toggle(*items)

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

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

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

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

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

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

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

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

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

tag_has(tagname, item=None)

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

Наличие: Тк 8.6

xview(*args)

Запросить или изменить горизонтальное положение дерева.

yview(*args)

Запросить или изменить вертикальное положение дерева.

Стилизация Ttk

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

См.также

Презентация конференции Tcl’2004
Данный документ объясняет, как работает движок темизации
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 является опцией, и каждое значение должно быть списком или кортежем (обычно), содержащими спецификации состояний, сгруппированные в кортежи, списки или другие предпочтения. Спецификация состояний — это соединение одного или нескольких состояний, а затем значения.

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

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')], например, в параметре переднего плана, результатом будет синий передний план, когда виджет находится в активном или нажатом состоянии.

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

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

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

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

from tkinter import ttk

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

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

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

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

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)

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

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

  • border=padding
    padding — это список до четырёх целых чисел, указывающих левую, верхнюю, правую и нижнюю границы соответственно.
  • height=height
    Определяет минимальную высоту элемента. Если меньше нуля, по умолчанию используется высота базового изображения.
  • padding=padding
    Определяет внутреннее заполнение элемента. По умолчанию используется значение границы, если оно не указано.
  • sticky=spec
    Определяет, как изображение будет помещено в окончательный участок. spec содержит ноль или более символов «n», «s», «w» или «e».
  • width=width
    Определяет минимальную ширину элемента. Если меньше нуля, по умолчанию используется ширина базового изображения.

Если «from» используется в качестве значения etype, 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, а затем восстанавливает предыдущую тему.

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

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

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

  • side: whatside
    Указывает, с какой стороны полости разместить элемент; один из верхнего, правого, нижнего или левого. Если он пропущен, элемент занимает всю полость.
  • sticky: nswe
    Указывает, где элемент находится внутри выделенного участка.
  • unit: 0 или 1
    Если установлено значение 1, элемент и все его потомки будут рассматриваться как один элемент для целей Widget.identify() и др. Он используется для таких вещей, как большие пальцы полосы прокрутки с захватами.
  • Children: [sublayout… ]
    Определяет список элементов, которые нужно поместить внутрь элемента. Каждый элемент представляет собой кортеж (или другой тип последовательности), где первый элемент — это имя макета, а другой — Компоновка.