Содержание страницы
tkinter.ttk – темизированные виджеты Tk¶tkinter.ttk – Tk themed widgets
Исходный код: Lib/tkinter/ttk.py
Модуль tkinter.ttk предоставляет доступ к набору тематических виджетов Tk, появившихся в Tk 8.5. Если Python был скомпилирован без поддержки Tk 8.5, этот модуль всё равно доступен при установке Tile. Первый способ с использованием Tk 8.5 даёт дополнительные преимущества, включая сглаживание шрифтов в X11 и прозрачность окон (требует композитного оконного менеджера в X11).
Основная идея tkinter.ttk заключается в том, чтобы, насколько это возможно,
разделять код, реализующий поведение виджета, и код, реализующий его
внешний вид.
См. также
- Поддержка стилизации виджетов Tk
Документ, представляющий поддержку тем для Tk
Использование Ttk¶Using 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 Widgets
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
и не предназначен для прямого создания экземпляров.
Стандартные опции¶Standard Options
Все виджеты ttk принимают следующие опции:
Параметр
Описание
класс
Задаёт класс окна. Этот класс используется при запросе базы параметров для получения других параметров окна, для определения тегов привязки (bindtags) по умолчанию и для выбора стандартного расположения и стиля виджета. Этот параметр доступен только для чтения и может быть задан только при создании окна.
курсор
Задает курсор мыши, используемый для виджета. Если установлено в пустую строку (по умолчанию), курсор наследуется от родительского виджета.
takefocus
Определяет, принимает ли окно фокус при навигации с клавиатуры. Возвращается 0, 1 или пустая строка. Если возвращается 0, это означает, что окно должно быть полностью пропущено при навигации. Если 1 – окно должно получать фокус ввода, пока оно видимо. Пустая строка означает, что скрипты навигации сами решают, ставить ли фокус на это окно.
стиль
Может использоваться для указания пользовательского стиля виджета.
Опции прокручиваемого виджета¶Scrollable Widget Options
Следующие параметры поддерживаются виджетами, управляемыми полосой прокрутки.
Параметр
Описание
xscrollcommand
Используется для взаимодействия с горизонтальными полосами прокрутки.
Когда представление в окне виджета изменяется, виджет генерирует команду Tcl на основе scrollcommand.
Обычно эта опция состоит из метода
Scrollbar.set()некоторой полосы прокрутки. Это приведет к обновлению полосы прокрутки при каждом изменении представления в окне.yscrollcommand
Используется для взаимодействия с вертикальными полосами прокрутки. Дополнительные сведения см. выше.
Опции метки¶Label Options
Следующие параметры поддерживаются метками, кнопками и другими виджетами, похожими на кнопки.
Параметр
Описание
текст
Задаёт текстовую строку для отображения внутри виджета.
textvariable
Задаёт имя, значение которого будет использоваться вместо ресурса параметра text.
подчёркивание
Если задан, указывает индекс (начиная с 0) символа для подчёркивания в текстовой строке. Подчёркнутый символ используется для мнемонической активации.
изображение
Задаёт изображение для отображения. Это список из одного или более элементов. Первый элемент – имя изображения по умолчанию. Остальная часть списка – последовательность пар состояние/значение, как определено в
Style.map(), указывающая разные изображения для использования, когда виджет находится в определённом состоянии или комбинации состояний. Все изображения в списке должны быть одного размера.составной
Определяет способ отображения изображения относительно текста, когда присутствуют оба параметра text и image. Допустимые значения:
text: отображать только текст
image: отображать только изображение
top, bottom, left, right: отображать изображение соответственно над текстом, под текстом, слева от текста или справа от текста.
none: по умолчанию. Отображать изображение, если оно есть, в противном случае – текст.
ширина
Если больше нуля, указывает, сколько места в ширину символа выделить для текстовой метки. Если меньше нуля – задаёт минимальную ширину. Если ноль или не указано, используется естественная ширина текстовой метки.
Опции совместимости¶Compatibility Options
Параметр
Описание
состояние
Может быть установлено в «normal» или «disabled» для управления битом состояния «disabled». Это опция только для записи: её установка изменяет состояние виджета, но метод
Widget.state()не влияет на эту опцию.
Состояния виджета¶Widget States
Состояние виджета – это битовая маска независимых флагов состояния.
Флаг
Описание
активно
Курсор мыши находится над виджетом, и нажатие кнопки мыши вызовет некоторое действие.
отключено
Виджет отключен программно.
фокус
Виджет имеет фокус ввода с клавиатуры.
нажато
Виджет находится в нажатом состоянии.
выбрано
«Вкл», «истина» или «текущий» для таких элементов, как Checkbutton и Radiobutton.
фон
В Windows и Mac есть понятие «активного» окна или окна переднего плана. Состояние background устанавливается для виджетов в фоновом окне и сбрасывается для виджетов в окне переднего плана.
только для чтения
Виджет не должен допускать изменения пользователем.
альтернативное
Альтернативный формат отображения, специфичный для виджета.
недопустимое
Значение виджета недопустимо.
Спецификация состояния – это последовательность имён состояний, опционально с префиксом в виде восклицательного знака, указывающим, что бит сброшен.
ttk.Widget¶
Помимо методов, описанных ниже, ttk.Widget поддерживает
методы tkinter.Widget.cget() и tkinter.Widget.configure().
-
class
tkinter.ttk.Widget¶ -
identify(x, y)¶ Возвращает имя элемента в позиции x y или пустую строку, если точка не находится ни в одном элементе.
x и y – это координаты в пикселях относительно виджета.
-
instate(statespec, callback=None, *args, **kw)¶ Проверяет состояние виджета. Если колбэк не указан, возвращает
True, если состояние виджета соответствует statespec, иFalseв противном случае. Если колбэк указан, то он вызывается с args, если состояние виджета соответствует statespec.
-
state(statespec=None)¶ Изменяет или запрашивает состояние виджета. Если statespec указан, устанавливает состояние виджета в соответствии с ним и возвращает новый statespec, указывающий, какие флаги были изменены. Если statespec не указан, возвращает текущие включенные флаги состояния.
statespec обычно является списком или кортежем.
-
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.
Параметры¶Options
Этот виджет принимает следующие специфические параметры:
Параметр
Описание
exportselection
Булево значение. Если установлено, выделение виджета связывается с выделением оконного менеджера (которое может быть получено вызовом Misc.selection_get, например).
выравнивание
Определяет выравнивание текста внутри виджета. Одно из значений: “left”, “center” или “right”.
рост
Определяет высоту выпадающего списка в строках.
postcommand
Скрипт (возможно, зарегистрированный с помощью Misc.register), который вызывается непосредственно перед отображением значений. Он может определять, какие значения отображать.
состояние
Одно из значений: "normal", "readonly" или "disabled". В состоянии "readonly" значение не может быть отредактировано напрямую, и пользователь может только выбирать значения из выпадающего списка. В состоянии "normal" текстовое поле доступно для редактирования. В состоянии "disabled" взаимодействие невозможно.
textvariable
Определяет имя, значение которого связано со значением виджета. Всякий раз, когда значение, ассоциированное с этим именем, изменяется, значение виджета обновляется, и наоборот. См.
tkinter.StringVar.значения
Определяет список значений для отображения в выпадающем списке.
ширина
Определяет целое число, указывающее желаемую ширину окна ввода, в символах среднего размера шрифта виджета.
Виртуальные события¶Virtual events
Виджет комбобокс генерирует виртуальное событие <<ComboboxSelected>>, когда пользователь выбирает элемент из списка значений.
ttk.Combobox¶
-
class
tkinter.ttk.Combobox¶ -
current(newindex=None)¶ Если указан newindex, устанавливает значение комбобокса на элемент с позицией newindex. В противном случае возвращает индекс текущего значения или -1, если текущее значение отсутствует в списке значений.
-
get()¶ Возвращает текущее значение комбобокса.
-
set(value)¶ Устанавливает значение комбобокса в 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.
Параметры¶Options
Этот виджет принимает следующие специфические параметры:
Параметр |
Описание |
|---|---|
from |
Вещественное значение. Если задано, это минимальное значение, до
которого кнопка уменьшения будет уменьшать. Должно быть
указано как |
на |
Вещественное значение. Если задано, это максимальное значение, до которого кнопка увеличения будет увеличивать. |
increment |
Вещественное значение. Задает величину, на которую кнопки увеличения/уменьшения изменяют значение. По умолчанию 1.0. |
значения |
Последовательность строковых или вещественных значений. Если задана, кнопки увеличения/уменьшения будут перебирать элементы этой последовательности, а не увеличивать или уменьшать числа. |
перенос |
Логическое значение. Если |
формат |
Строковое значение. Задает формат чисел, устанавливаемых кнопками увеличения/уменьшения. Он должен быть в форме “%W.Pf”, где W – ширина заполнения значения, P – точность, а ‘%’ и ‘f’ являются литералами. |
command |
Вызываемый объект Python. Будет вызван без аргументов при каждом нажатии кнопки увеличения или уменьшения. |
Виртуальные события¶Virtual events
Виджет spinbox генерирует виртуальное событие <<Increment>>, когда пользователь нажимает <Up>, и виртуальное событие <<Decrement>>, когда пользователь нажимает <Down>.
ttk.Spinbox¶
Notebook¶
Виджет Ttk Notebook управляет набором окон и показывает по одному за раз. Каждое дочернее окно связано с вкладкой; пользователь может выбрать вкладку, чтобы изменить отображаемое окно.
Параметры¶Options
Этот виджет принимает следующие специфические параметры:
Параметр
Описание
рост
Если присутствует и больше нуля, задает желаемую высоту области панели (не включая внутренние отступы или вкладки). В противном случае используется максимальная высота всех панелей.
отступы
Задает величину дополнительного пространства, добавляемого вокруг блокнота. Отступы представляют собой список из не более чем четырех спецификаций длины: слева, сверху, справа, снизу. Если указано менее четырех элементов, значение снизу по умолчанию равно верхнему, справа – левому, а верхнее – левому.
ширина
Если присутствует и больше нуля, задаёт желаемую ширину области панели (без учёта внутреннего отступа). В противном случае используется максимальная ширина всех панелей.
Параметры вкладки¶Tab Options
Также существуют специальные параметры для вкладок:
Параметр
Описание
состояние
Может быть «normal», «disabled» или «hidden». Если «disabled», то вкладка не выбирается. Если «hidden», то вкладка не отображается.
привязка
Определяет, как дочернее окно позиционируется внутри области панели. Значение – строка, содержащая ноль или более символов «n», «s», «e» или «w». Каждая буква обозначает сторону (север, юг, восток или запад), к которой будет прикреплено дочернее окно, в соответствии с менеджером геометрии
grid().отступы
Задаёт величину дополнительного пространства между блокнотом и данной панелью. Синтаксис такой же, как для параметра padding, используемого этим виджетом.
текст
Задаёт текст, отображаемый на вкладке.
изображение
Задаёт изображение для отображения на вкладке. Смотрите параметр image, описанный в
Widget.составной
Определяет, как отображать изображение относительно текста, если присутствуют оба параметра text и image. Допустимые значения см. в Параметры метки.
подчёркивание
Задаёт индекс (начиная с 0) символа для подчеркивания в текстовой строке. Подчёркнутый символ используется для мнемонической активации, если вызывается
Notebook.enable_traversal().
Идентификаторы вкладок¶Tab Identifiers
Параметр tab_id, присутствующий в нескольких методах ttk.Notebook, может принимать любую
из следующих форм:
Целое число от нуля до количества вкладок
Имя дочернего окна
Позиционное указание вида «@x,y», идентифицирующее вкладку
Литеральная строка «current», которая идентифицирует текущую выбранную вкладку
Строковый литерал «end», возвращающий количество вкладок (действителен только для
Notebook.index())
Виртуальные события¶Virtual Events
Этот виджет генерирует виртуальное событие <<NotebookTabChanged>> после выбора новой вкладки.
ttk.Notebook¶
-
class
tkinter.ttk.Notebook¶ -
add(child, **kw)¶ Добавляет новую вкладку в блокнот.
Если окно в данный момент управляется блокнотом, но скрыто, оно восстанавливается на свою предыдущую позицию.
Список доступных опций см. в Tab Options.
-
forget(tab_id)¶ Удаляет вкладку, указанную tab_id, снимает с отображения и управления связанное окно.
-
hide(tab_id)¶ Скрывает вкладку, указанную tab_id.
Вкладка не будет отображаться, но связанное окно остаётся под управлением блокнота, а его конфигурация запоминается. Скрытые вкладки можно восстановить командой
add().
-
identify(x, y)¶ Возвращает имя элемента вкладки в позиции x, y или пустую строку, если элемент отсутствует.
-
index(tab_id)¶ Возвращает числовой индекс вкладки, указанной tab_id, или общее количество вкладок, если tab_id равно строке «end».
-
insert(pos, child, **kw)¶ Вставляет панель в указанную позицию.
pos может быть строкой «end», целочисленным индексом или именем дочернего элемента, находящегося под управлением. Если child уже управляется блокнотом, он перемещается в указанную позицию.
Список доступных опций см. в Tab Options.
-
select(tab_id=None)¶ Выбирает указанную tab_id.
Будет отображено связанное дочернее окно, а ранее выбранное окно (если оно отличается) будет скрыто. Если tab_id не указан, возвращается имя виджета текущей выбранной панели.
-
tab(tab_id, option=None, **kw)¶ Запрашивает или изменяет параметры указанной tab_id.
Если kw не указан, возвращает словарь значений опций вкладки. Если указан option, возвращает значение этой option. В противном случае устанавливает опции в соответствующие значения.
-
tabs()¶ Возвращает список окон, управляемых Notebook.
-
enable_traversal()¶ Включает навигацию с клавиатуры для окна верхнего уровня, содержащего этот блокнот.
Это расширяет привязки для окна верхнего уровня, содержащего блокнот, следующим образом:
Control-Tab: выбирает вкладку, следующую за текущей выбранной.
Shift-Control-Tab: выбирает вкладку, предшествующую текущей выбранной.
Alt-K: где K – мнемонический (подчеркнутый) символ любой вкладки, выбирает эту вкладку.
Несколько виджетов Notebook в одном окне верхнего уровня могут быть включены для навигации,\nвключая вложенные Notebook. Однако навигация по Notebook работает\nкорректно, только если все панели имеют тот Notebook, в котором они находятся, в качестве родительского виджета.
-
Progressbar¶
Виджет ttk.Progressbar отображает состояние длительной операции.\nОн может работать в двух режимах: 1) детерминированный режим, показывающий\nобъем выполненной работы относительно общего объема работы, и 2)\nиндетерминированный режим, который предоставляет анимированное отображение, чтобы пользователь знал, что работа выполняется.
Параметры¶Options
Этот виджет принимает следующие специфические параметры:
Параметр
Описание
ориентация
Одно из «horizontal» или «vertical». Указывает ориентацию индикатора выполнения.
длина
Указывает длину длинной оси индикатора выполнения (ширину, если горизонтальный, и высоту, если вертикальный).
Режим
Одно из «determinate» или «indeterminate».
максимум
Число, задающее максимальное значение. По умолчанию равно 100.
значение
Текущее значение индикатора выполнения. В режиме «determinate» представляет объём выполненной работы. В режиме «indeterminate» интерпретируется как по модулю maximum; то есть индикатор выполнения завершает один «цикл», когда его значение увеличивается на maximum.
переменная
Имя, связанное со значением опции. Если задано, значение индикатора выполнения автоматически устанавливается равным значению этого имени при каждом его изменении.
фаза
Опция только для чтения. Виджет периодически увеличивает значение этой опции, когда его значение больше 0 и, в режиме «determinate», меньше maximum. Эта опция может использоваться текущей темой для дополнительных анимационных эффектов.
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 отображает горизонтальную или вертикальную разделительную\nлинию.
Он не имеет других методов, кроме унаследованных от ttk.Widget.
Параметры¶Options
Этот виджет принимает следующую специфическую опцию:
Параметр
Описание
ориентация
Одно из «horizontal» или «vertical». Указывает ориентацию разделителя.
Sizegrip¶
Виджет ttk.Sizegrip (также известный как маркер изменения размера) позволяет пользователю\nизменять размер содержащего окна верхнего уровня, нажимая и перетаскивая маркер.
Этот виджет не имеет ни специфических опций, ни специфических методов, кроме
унаследованных от ttk.Widget.
Примечания для конкретных платформ¶Platform-specific notes
На MacOS X окна верхнего уровня по умолчанию автоматически содержат встроенный размерный захват. Добавление
Sizegripбезвредно, так как встроенный захват просто перекроет виджет.
Ошибки¶Bugs
Если положение содержащего окна верхнего уровня было задано относительно правого\nили нижнего края экрана (например, ….), виджет
Sizegripне будет\nизменять размер окна.Этот виджет поддерживает только изменение размера в направлении «southeast».
Treeview¶
Виджет ttk.Treeview отображает иерархическую коллекцию элементов.\nКаждый элемент имеет текстовую метку, необязательное изображение и необязательный список значений\nданных. Значения данных отображаются в последовательных столбцах после метки\nдерева.
Порядок отображения значений данных можно контролировать, установив
опцию виджета displaycolumns. Древовидный виджет также может отображать заголовки
столбцов. Доступ к столбцам можно получить по номерам или символьным именам, перечисленным в
опции columns виджета. См. Идентификаторы столбцов.
Каждый элемент идентифицируется уникальным именем. Виджет сгенерирует ID элементов,
если они не предоставлены вызывающей стороной. Существует выделенный корневой элемент,
с именем {}. Сам корневой элемент не отображается; его дочерние элементы появляются на
верхнем уровне иерархии.
Каждый элемент также имеет список тегов, которые можно использовать для связывания событий с отдельными элементами и управления внешним видом элемента.
Виджет Treeview поддерживает горизонтальную и вертикальную прокрутку в соответствии с
опциями, описанными в Параметры прокручиваемых виджетов, и методами
Treeview.xview() и Treeview.yview().
Параметры¶Options
Этот виджет принимает следующие специфические параметры:
Параметр
Описание
столбцы
Список идентификаторов столбцов, определяющий количество столбцов и их имена.
отображаемые столбцы
Список идентификаторов столбцов (символьных или целочисленных индексов), определяющий, какие столбцы данных отображаются и в каком порядке они появляются, или строка «#all».
рост
Определяет количество строк, которые должны быть видны. Примечание: запрошенная ширина определяется суммой ширин столбцов.
отступы
Определяет внутренний отступ виджета. Отступ – это список из не более чем четырёх спецификаций длины.
режим выбора
Управляет тем, как встроенные привязки класса управляют выделением. Одно из значений: «extended», «browse» или «none». Если установлено «extended» (по умолчанию), можно выбрать несколько элементов. Если «browse», единовременно выбирается только один элемент. Если «none», выделение не будет изменяться.
Обратите внимание, что код приложения и привязки тегов могут установить выделение по своему усмотрению, независимо от значения этой опции.
отображение
Список, содержащий ноль или более следующих значений, определяющий, какие элементы дерева отображать.
tree: отображать метки дерева в столбце #0.
headings: отображать строку заголовков.
По умолчанию отображаются «tree headings», т.е. показываются все элементы.
Примечание: столбец #0 всегда относится к столбцу дерева, даже если show=«tree» не указано.
Параметры элемента¶Item Options
Следующие опции элементов могут быть указаны для элементов в командах виджета insert и item.
Параметр
Описание
текст
Текстовая метка, отображаемая для элемента.
изображение
Изображение Tk, отображаемое слева от метки.
значения
Список значений, связанных с элементом.
Каждый элемент должен содержать столько же значений, сколько столбцов в опции columns виджета. Если значений меньше, чем столбцов, оставшиеся значения считаются пустыми. Если значений больше, чем столбцов, лишние значения игнорируются.
открыт
True/Falseзначение, указывающее, должны ли дочерние элементы отображаться или быть скрыты.теги
Список тегов, связанных с этим элементом.
Параметры тега¶Tag Options
Для тегов могут быть указаны следующие опции:
Параметр
Описание
передний план
Определяет цвет текста.
фон
Определяет цвет фона ячейки или элемента.
шрифт
Определяет шрифт, используемый при отрисовке текста.
изображение
Определяет изображение элемента, если опция image элемента пуста.
Идентификаторы столбцов¶Column Identifiers
Идентификаторы столбцов могут принимать одну из следующих форм:
Символическое имя из списка опции columns.
Целое число n, указывающее n-й столбец данных.
Строка вида #n, где n – целое число, указывающая n-й столбец отображения.
Примечания:
Значения опций элемента могут отображаться в порядке, отличном от порядка, в котором они хранятся.
Столбец #0 всегда ссылается на столбец дерева, даже если show="tree" не указан.
Номер столбца данных – это индекс в списке значений опций элемента; номер столбца отображения – это номер столбца в дереве, где отображаются значения. Метки дерева отображаются в столбце #0. Если опция displaycolumns не задана, то столбец данных n отображается в столбце #n+1. И снова, столбец #0 всегда ссылается на столбец дерева.
Виртуальные события¶Virtual Events
Виджет Treeview генерирует следующие виртуальные события.
Событие
Описание
<<TreeviewSelect>>
Генерируется при каждом изменении выделения.
<<TreeviewOpen>>
Генерируется непосредственно перед установкой элемента фокуса в open=True.
<<TreeviewClose>>
Генерируется сразу после установки элемента фокуса в open=False.
Методы Treeview.focus() и Treeview.selection() можно использовать
для определения затронутого элемента или элементов.
ttk.Treeview¶
-
class
tkinter.ttk.Treeview¶ -
bbox(item, column=None)¶ Возвращает ограничивающую рамку (относительно окна виджета treeview) указанного элемента в формате (x, y, width, height).
Если указан столбец, возвращается ограничивающая рамка этой ячейки. Если элемент не виден (т.е. является потомком закрытого элемента или находится за пределами экрана при прокрутке), возвращается пустая строка.
-
get_children(item=None)¶ Возвращает список дочерних элементов, принадлежащих элементу.
Если элемент не указан, возвращает корневые дочерние элементы.
-
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=None, **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 не указан, возвращает выбранные элементы. В противном случае действует в соответствии со следующими методами выбора.
Устарело с версии 3.6, будет удалено в версии 3.8: Использование
selection()для изменения состояния выделения устарело. Вместо этого используйте следующие методы выбора.
-
selection_set(*items)¶ Элементы становятся новым выделением.
Изменено в версии 3.6: items можно передавать отдельными аргументами, а не только одним кортежем.
-
selection_add(*items)¶ Добавляет элементы в выделение.
Изменено в версии 3.6: items можно передавать отдельными аргументами, а не только одним кортежем.
-
selection_remove(*items)¶ Удаляет элементы из выделения.
Изменено в версии 3.6: items можно передавать отдельными аргументами, а не только одним кортежем.
-
selection_toggle(*items)¶ Переключает состояние выделения каждого элемента из items.
Изменено в версии 3.6: 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=None)¶ Если указан элемент, возвращает 1 или 0 в зависимости от того, имеет ли указанный элемент заданное имя тега. В противном случае возвращает список всех элементов, имеющих указанный тег.
Доступность: Tk 8.6
-
xview(*args)¶ Запрашивает или изменяет горизонтальное положение treeview.
-
yview(*args)¶ Запрашивает или изменяет вертикальное положение treeview.
-
Стилизация Ttk¶Ttk Styling
Каждому виджету в ttk назначается стиль, который определяет набор
элементов, составляющих виджет, и то, как они расположены, а также динамические
и стандартные настройки для параметров элементов. По умолчанию имя стиля – это
то же, что и имя класса виджета, но его можно переопределить с помощью опции style
виджета. Если имя класса виджета неизвестно, используйте метод
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 является параметром, а каждое значение должно быть списком или кортежем (обычно), содержащим спецификации состояний (statespecs), сгруппированные в кортежи, списки или как-то иначе. Спецификация состояний – это комбинация одного или нескольких состояний, за которыми следует значение.
Пример может прояснить это.
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()
Обратите внимание, что порядок последовательностей (состояния, значение) для параметра важен. Если, например, в параметре foreground изменить порядок на
[('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, если указан, должен быть списком или другим типом последовательности (исключая строки), где каждый элемент должен быть кортежем, первый элемент – имя макета, а второй элемент должен иметь формат, описанный в разделе 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)¶ Создаёт новый элемент в текущей теме с заданным 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 для темы по умолчанию:
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>>.
-
Компоновки¶Layouts
Макет может быть просто None, если он не принимает параметров, или словарём параметров, определяющих способ расположения элемента. Механизм компоновки использует упрощённую версию геометрического менеджера pack: для начальной области каждый элемент получает свой участок. Допустимые параметры/значения:
- side: whichside
Указывает, с какой стороны области размещать элемент; одно из значений: top, right, bottom или left. Если не указано, элемент занимает всю область.
- sticky: nswe
Указывает, где размещается элемент внутри выделенной ему части.
- unit: 0 or 1
Если установлено в 1, заставляет элемент и всех его потомков рассматривать как один элемент для целей
Widget.identify()и т.д. Используется для таких вещей, как бегунки полосы прокрутки с захватами.
- children: [sublayout… ]
Задаёт список элементов для размещения внутри элемента. Каждый элемент – это кортеж (или другой тип последовательности), где первый элемент – название компоновки, а второй – Layout.