Документация Python неофициальный перевод
Содержание страницы

24.2. ttk – тематические виджеты Tkttk – Tk themed widgets

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

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

См. также

Поддержка стилизации виджетов Tk

Документ, в котором была представлена поддержка темизации Tk

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

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

import ttk

Но код, подобный этому:

from Tkinter import *

при желании может использовать следующее:

from Tkinter import *
from ttk import *

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

Это даёт непосредственное преимущество использования новых виджетов, обеспечивая лучший внешний вид и ощущение (look & feel) на разных платформах, но следует учитывать, что они не полностью совместимы. Основное отличие в том, что такие опции виджетов, как “fg”, “bg” и другие, связанные со стилизацией, больше не присутствуют в виджетах Ttk. Используйте ttk.Style, чтобы добиться того же (или лучшего) стиля.

См. также

Преобразование существующих приложений для использования виджетов Tile

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

24.2.2. Виджеты TtkTtk Widgets

Ttk включает 17 виджетов, 11 из которых уже существуют в Tkinter: Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale и Scrollbar. Шесть новых классов виджетов: Combobox, Notebook, Progressbar, Separator, Sizegrip и Treeview. Все эти классы являются подклассами Widget.

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

Код 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.

24.2.3. ВиджетWidget

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

24.2.3.1. Стандартные параметрыStandard Options

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

Параметр

Описание

класс

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

курсор

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

takefocus

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

стиль

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

24.2.3.2. Параметры прокручиваемых виджетовScrollable Widget Options

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

опция

описание

xscrollcommand

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

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

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

yscrollcommand

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

24.2.3.3. Параметры меткиLabel Options

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

опция

описание

текст

Задаёт текстовую строку для отображения внутри виджета.

textvariable

Задаёт имя, значение которого будет использоваться вместо ресурса параметра text.

подчёркивание

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

изображение

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

составной

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

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

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

  • top, bottom, left, right: отображать изображение соответственно над текстом, под текстом, слева от текста или справа от текста.

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

ширина

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

24.2.3.4. Параметры совместимостиCompatibility Options

опция

описание

состояние

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

24.2.3.5. Состояния виджетовWidget States

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

флаг

описание

активно

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

отключено

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

фокус

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

нажато

Виджет нажат.

выбрано

“On”, “true”, или “current” для таких элементов, как Checkbuttons и radiobuttons.

фон

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

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

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

альтернативное

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

недопустимое

Значение виджета недопустимо.

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

24.2.3.6. ttk.Widget

Кроме методов, описанных ниже, класс ttk.Widget поддерживает методы Tkinter.Widget.cget() и Tkinter.Widget.configure().

class 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 обычно является списком или кортежем.

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

24.2.4.1. ПараметрыOptions

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

опция

описание

exportselection

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

выравнивание

Определяет выравнивание текста внутри виджета. Одно из значений: “left”, “center” или “right”.

рост

Определяет высоту выпадающего списка в строках.

postcommand

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

состояние

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

textvariable

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

значения

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

ширина

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

24.2.4.2. Виртуальные событияVirtual events

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

24.2.4.3. ttk.Combobox

class ttk.Combobox
current([newindex=None])

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

get()

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

set(value)

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

24.2.5. Notebook

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

24.2.5.1. ПараметрыOptions

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

опция

описание

рост

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

отступы

Задаёт величину дополнительного пространства, добавляемого вокруг блокнота. Отступ – это список из не более четырёх спецификаций длины: слева, сверху, справа, снизу. Если указано меньше четырёх элементов, нижний отступ по умолчанию равен верхнему, правый – левому, а верхний – левому.

ширина

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

24.2.5.2. Параметры вкладокTab Options

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

опция

описание

состояние

Может быть «normal», «disabled» или «hidden». Если «disabled», то вкладка не выбирается. Если «hidden», то вкладка не отображается.

привязка

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

отступы

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

текст

Задаёт текст, отображаемый на вкладке.

изображение

Задаёт изображение для отображения на вкладке. Смотрите параметр image, описанный в Widget.

составной

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

подчёркивание

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

24.2.5.3. Идентификаторы вкладокTab Identifiers

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

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

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

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

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

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

24.2.5.4. Виртуальные событияVirtual Events

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

24.2.5.5. ttk.Notebook

class 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])

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

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

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

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

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

tabs()

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

enable_traversal()

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

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

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

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

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

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

24.2.6. Progressbar

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

24.2.6.1. ПараметрыOptions

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

опция

описание

ориентация

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

длина

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

Режим

Одно из «determinate» или «indeterminate».

максимум

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

значение

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

переменная

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

фаза

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

24.2.6.2. ttk.Progressbar

class ttk.Progressbar
start([interval])

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

step([amount])

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

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

stop()

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

24.2.7. Separator

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

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

24.2.7.1. ПараметрыOptions

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

опция

описание

ориентация

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

24.2.8. Sizegrip

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

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

24.2.8.1. Примечания по платформеPlatform-specific notes

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

24.2.8.2. ОшибкиBugs

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

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

24.2.9. Treeview

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

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

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

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

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

24.2.9.1. ПараметрыOptions

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

опция

описание

столбцы

Список идентификаторов столбцов, определяющий количество столбцов и их имена.

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

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

рост

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

отступы

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

режим выбора

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

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

отображение

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

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

  • headings: отображать строку заголовков.

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

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

24.2.9.2. Параметры элементаItem Options

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

опция

описание

текст

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

изображение

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

значения

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

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

открыт

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

теги

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

24.2.9.3. Параметры тегаTag Options

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

опция

описание

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

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

фон

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

шрифт

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

изображение

Определяет изображение элемента, если опция image элемента пуста.

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

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

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

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

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

Примечания:

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

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

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

24.2.9.5. Виртуальные событияVirtual Events

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

событие

описание

<<TreeviewSelect>>

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

<<TreeviewOpen>>

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

<<TreeviewClose>>

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

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

24.2.9.6. ttk.Treeview

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

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

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

get_children([item])

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

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

set_children(item, *newchildren)

Заменяет потомка элемента на новые дочерние элементы.

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

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

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

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

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

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

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

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

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

  • minwidth: ширина

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

  • растяжение: True/False

    Определяет, должна ли ширина столбца изменяться при изменении размера виджета.

  • width: ширина

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

Чтобы настроить столбец дерева, вызовите этот метод с column = “#0”.

delete(*items)

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

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

detach(*items)

Открепляет все указанные items от дерева.

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

Корневой элемент не может быть откреплён.

exists(item)

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

focus([item=None])

Если указан item, устанавливает элемент фокуса на item. В противном случае возвращает текущий элемент фокуса или '' (пустую строку), если его нет.

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

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

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

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

  • text: текст

    Текст, отображаемый в заголовке столбца.

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

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

  • привязка: anchor

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

  • command: колбэк

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

Для настройки заголовка столбца дерева вызовите этот метод с column = "#0".

identify(component, x, y)

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

identify_row(y)

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

identify_column(x)

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

Столбец дерева имеет ID #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(item[, option[, **kw]])

Запрашивает или изменяет параметры указанного item.

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

move(item, parent, index)

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

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

next(item)

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

parent(item)

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

prev(item)

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

reattach(item, parent, index)

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

see(item)

Обеспечивает видимость элемента.

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

selection([selop=None[, items=None]])

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

selection_set(items)

Элементы становятся новым выделением.

selection_add(items)

Добавляет элементы в выделение.

selection_remove(items)

Удаляет элементы из выделения.

selection_toggle(items)

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

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

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

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

xview(*args)

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

yview(*args)

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

24.2.10. Стилизация TtkTtk Styling

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

См. также

Доклад на конференции Tcl’2004

В этом документе объясняется, как работает механизм тем.

class ttk.Style

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

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

Запрашивает или устанавливает значение по умолчанию для указанных параметров в style.

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

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

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
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, он используется как запасное значение, если спецификация для параметра не найдена.

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

import ttk

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

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

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

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

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

  • border=padding

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

  • height=height

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

  • padding=padding

    Задаёт внутренний отступ элемента. По умолчанию равен значению border, если не указан.

  • sticky=spec

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

  • width=width

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

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

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

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

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

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

24.2.10.1. МакетыLayouts

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

  • side: какая сторона

    Указывает, с какой стороны области размещать элемент; одно из значений: top, right, bottom или left. Если не указано, элемент занимает всю область.

  • прикрепление: nswe

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

  • unit: 0 или 1

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

  • children: [sublayout… ]

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