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

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


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

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

См.также

Tk Widget Styling Support

Документ, вводящий тематическую поддержку Тз

Использование 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 widgets. Вместо этого используйте класс 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 поддерживают следующие параметры:

Вариант

Описание

класс

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

указатель

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

сосредоточься

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

стиль

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

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

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

Вариант

Описание

команда xscrollcommand

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

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

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

команда yscrollcommand

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

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

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

Вариант

Описание

текст

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

изменяемый текст

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

подчеркивать

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

изображение

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

соединение

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

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

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

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

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

ширина

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

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

Вариант

Описание

государство

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

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

Состояние виджета - это растровое изображение независимых флагов состояния.

Флаг

Описание

активный

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

отключенный

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

сосредоточить

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

прессованный

Нажат виджет

выбранный

«Включено», «true» или «current» для таких элементов, как контрольные кнопки и переключатели

фон

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

только для чтения

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

чередовать

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

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

Значение виджета является недопустимым

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

ттк.Виджет

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

Выпадающий список

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

государство

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

изменяемый текст

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

ценности

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

ширина

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

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

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

ттк.Выпадающий список

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

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

get()

Возвращает текущее значение выпадающего списка.

set(value)

Устанавливает значение выпадающего списка равным value.

Вращающийся ящик

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

Опции

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

Вариант

Описание

от

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

к

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

прирост

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

ценности

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

заворачивать

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

формат

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

команда

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

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

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

ттк.Спинбокс

class tkinter.ttk.Spinbox
get()

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

set(value)

Устанавливает значение параметра spinbox равным value.

Блокнот

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

Опции

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

Вариант

Описание

высота

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

набивка

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

ширина

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

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

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

Вариант

Описание

государство

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

липкий

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

набивка

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

текст

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

изображение

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

соединение

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

подчеркивать

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

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

:class:`ttk.Notebook`Идентификаторы вкладок

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

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

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

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

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

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

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

ттк.Записная книжка

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

Добавляет новую вкладку в записную книжку.

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

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

forget(tab_id)

Удаляет вкладку, указанную с помощью tab_id, отменяет отображение и управление соответствующим окном.

hide(tab_id)

Скрывает вкладку, указанную с помощью tab_id.

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

identify(x, y)

Возвращает имя элемента tab в позиции 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 не задано, возвращает словарь значений параметра tab. Если указано значение option, возвращает значение этого параметра. В противном случае для параметров устанавливаются соответствующие значения.

tabs()

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

enable_traversal()

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

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

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

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

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

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

Индикатор прогресса

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

Опции

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

Вариант

Описание

направлять

Может быть «горизонтальным» или «вертикальным». Определяет ориентацию индикатора выполнения.

длина

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

режим

Один из «определенных» или «неопределенных».

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

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

ценность

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

переменная

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

фаза

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

ttk.Индикатор выполнения

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

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

step(amount=None)

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

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

stop()

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

Разделитель

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

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

Опции

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

Вариант

Описание

направлять

Может быть «горизонтальным» или «вертикальным». Определяет ориентацию разделителя.

Захват размера

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

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

Примечания, относящиеся к конкретной платформе

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

Ошибки

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

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

Просмотр дерева

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

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

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

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

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

Опции

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

Вариант

Описание

столбцы

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

отображаемые столбцы

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

высота

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

набивка

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

выберите режим

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

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

показывать

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

  • дерево: отображение древовидных меток в столбце #0.

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

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

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

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

В командах insert и item widget для элементов могут быть заданы следующие параметры элемента.

Вариант

Описание

текст

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

изображение

Изображение технического задания, отображаемое слева от этикетки.

ценности

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

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

открывать

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

теги

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

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

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

Вариант

Описание

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

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

фон

Задает цвет фона ячейки или элемента.

шрифт

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

изображение

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

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

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

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

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

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

Записи:

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

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

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

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

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

Событие

Описание

<<Выбор дерева>>

Генерируется всякий раз, когда выбор меняется.

<<Просмотр дерева открыт>>

Сгенерированный непосредственно перед настройкой элемента focus на открытие=True.

<<Просмотр дерева закрытым>>

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

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

ttk.Просмотр дерева

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

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

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

get_children(item=None)

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

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

set_children(item, *newchildren)

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

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

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

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

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

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

идентификатор

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

привязка: Одно из стандартных значений привязки технического задания.

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

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

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

растягивание: True/False

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

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

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

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

delete(*items)

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

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

detach(*items)

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

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

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

exists(item)

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

focus(item=None)

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

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

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

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

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

текст: текст

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

изображение: имя изображения

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

якорь: якорь

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

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

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

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

identify(component, x, y)

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

identify_row(y)

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

identify_column(x)

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

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

identify_region(x, y)

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

регион

значение

заголовок

Область заголовка дерева.

разделитель

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

дерево

Область деревьев.

ячейка

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

Доступность: Тз 8.6.

identify_element(x, y)

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

Доступность: Тз 8.6.

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

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

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

next(item)

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

parent(item)

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

prev(item)

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

reattach(item, parent, index)

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

see(item)

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

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

selection()

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

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

selection_set(*items)

элементы становятся новым выбором.

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

selection_add(*items)

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

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

selection_remove(*items)

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

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

selection_toggle(*items)

Переключите режим выбора каждого элемента в разделе «Элементы».

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

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

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

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

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

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

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

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

tag_has(tagname, item=None)

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

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

xview(*args)

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

yview(*args)

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

Укладка Ттк

Каждому виджету в ttk присваивается стиль, который определяет набор элементов, составляющих виджет, и способ их расположения, а также динамические настройки и настройки по умолчанию для параметров элементов. По умолчанию имя стиля совпадает с именем класса виджета, но оно может быть переопределено параметром стиля виджета. Если вы не знаете имя класса виджета, используйте метод Misc.winfo_class() (some widget.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 - это параметр, и каждое значение должно быть списком или кортежем (обычно), содержащим типы состояний, сгруппированные в кортежи, списки или некоторые другие параметры. statespec - это совокупность одного или нескольких состояний, а затем значения.

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

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)

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

Если указано значение 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», то args должен содержать имя изображения по умолчанию, за которым следуют пары statespec/value (это спецификация изображения), а kw может иметь следующие параметры:

граница=заполнение

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

высота=выс.

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

заполнение=отступ

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

липкий=спецификация

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

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

element_options(elementname)

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

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

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

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

theme_settings(themename, settings)

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

Каждый ключ в settings является стилем, и каждое значение может содержать ключи «configure», «map», «layout» и «element create», и ожидается, что они будут иметь тот же формат, который указан в методах 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, если он не содержит опций, или содержит набор опций, указывающих, как расположить элемент. Механизм компоновки использует упрощенную версию pack geometry manager: при наличии начальной полости каждому элементу выделяется участок.

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

сторона: на какой стороне

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

липкий: nswe

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

единица измерения: 0 или 1

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

дочерние элементы: [подпрограмма… ]

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

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