Содержание страницы
24.2. tkinter.ttk – стилизованные виджеты Tk¶tkinter.ttk – Tk themed widgets
Модуль tkinter.ttk предоставляет доступ к набору темизированных виджетов Tk, введённому в Tk 8.5. Если Python не был скомпилирован с Tk 8.5, этот модуль всё равно может быть доступен, если установлен Tile. Первый способ (с использованием Tk 8.5) даёт дополнительные преимущества, включая сглаживание шрифтов в X11 и прозрачность окон (требует оконного менеджера с композитингом в X11).
Основная идея tkinter.ttk заключается в том, чтобы по возможности разделить код, реализующий поведение виджета, и код, реализующий его внешний вид.
См. также
- Поддержка стилизации виджетов Tk
- Документ, представляющий поддержку тем для Tk
24.2.1. Использование 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) о различиях, обычно возникающих при переносе приложений на использование новых виджетов.
24.2.2. Виджеты Ttk¶Ttk Widgets
Ttk поставляется с 17 виджетами, одиннадцать из которых уже существовали в tkinter: Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale и Scrollbar. Остальные шесть – новые: 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.
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¶Label Options
Следующие параметры поддерживаются метками, кнопками и другими виджетами, похожими на кнопки.
опция описание текст Задаёт текстовую строку для отображения внутри виджета. textvariable Задаёт имя, значение которого будет использоваться вместо ресурса параметра text. подчёркивание Если задан, указывает индекс (начиная с 0) символа для подчёркивания в текстовой строке. Подчёркнутый символ используется для мнемонической активации. изображение Определяет изображение для отображения. Это список из одного или более элементов. Первый элемент – имя изображения по умолчанию. Остальная часть списка – последовательность пар спецификация_состояния/значение, как определено в Style.map(), задающая различные изображения для использования, когда виджет находится в определённом состоянии или комбинации состояний. Все изображения в списке должны быть одного размера. составной Определяет способ отображения изображения относительно текста, когда присутствуют оба параметра text и image. Допустимые значения:
- text: отображать только текст
- image: отображать только изображение
- top, bottom, left, right: отображать изображение соответственно над текстом, под текстом, слева от текста или справа от текста.
- none: по умолчанию. Отображать изображение, если оно есть, в противном случае – текст.
ширина Если больше нуля, указывает, сколько места в ширину символа выделить для текстовой метки. Если меньше нуля – задаёт минимальную ширину. Если ноль или не указано, используется естественная ширина текстовой метки.
24.2.3.4. Опции совместимости¶Compatibility Options
опция описание состояние Может быть установлено в «normal» или «disabled» для управления битом состояния «disabled». Это опция только для записи: её установка изменяет состояние виджета, но метод Widget.state() не влияет на эту опцию.
24.2.3.5. Состояния виджета¶Widget States
Состояние виджета – это битовая маска независимых флагов состояния.
флаг описание активно Курсор мыши находится над виджетом, и нажатие кнопки мыши вызовет некоторое действие. отключено Виджет отключен программно. фокус Виджет имеет фокус ввода с клавиатуры. нажато Виджет находится в нажатом состоянии. выбрано «Вкл», «истина» или «текущий» для таких элементов, как Checkbutton и Radiobutton. фон В Windows и Mac есть понятие «активного» окна или окна переднего плана. Состояние background устанавливается для виджетов в фоновом окне и сбрасывается для виджетов в окне переднего плана. только для чтения Виджет не должен допускать изменения пользователем. альтернативное Альтернативный формат отображения, специфичный для виджета. недопустимое Значение виджета недопустимо.
Спецификация состояния – это последовательность имён состояний, опционально с префиксом в виде восклицательного знака, указывающим, что бит сброшен.
24.2.3.6. 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 обычно является списком или кортежем.
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.inset(), 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
Виджет комбобокс генерирует виртуальное событие <<ComboboxSelected>>, когда пользователь выбирает элемент из списка значений.
24.2.4.3. ttk.Combobox¶
- class tkinter.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. составной Определяет, как отображать изображение относительно текста, если присутствуют оба параметра text и image. Допустимые значения см. в Параметры метки. подчёркивание Определяет индекс (с нуля) символа для подчёркивания в текстовой строке. Подчёркнутый символ используется для мнемонической активации, если вызывается 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 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, в котором они находятся, в качестве родительского виджета.
24.2.6. Progressbar¶
Виджет ttk.Progressbar показывает состояние длительной операции. Он может работать в двух режимах: 1) детерминированный режим, который показывает объём выполненной работы относительно общего объёма работы, и 2) недетерминированный режим, который предоставляет анимированное отображение, чтобы пользователь знал, что работа выполняется.
24.2.6.1. Параметры¶Options
Этот виджет принимает следующие специфические параметры:
опция описание ориентация Одно из «horizontal» или «vertical». Указывает ориентацию индикатора выполнения. длина Указывает длину длинной оси индикатора выполнения (ширину, если горизонтальный, и высоту, если вертикальный). Режим Одно из «determinate» или «indeterminate». максимум Число, задающее максимальное значение. По умолчанию равно 100. значение Текущее значение индикатора выполнения. В режиме «determinate» представляет объём выполненной работы. В режиме «indeterminate» интерпретируется как по модулю maximum; то есть индикатор выполнения завершает один «цикл», когда его значение увеличивается на maximum. переменная Имя, связанное со значением опции. Если задано, значение индикатора выполнения автоматически устанавливается равным значению этого имени при каждом его изменении. фаза Опция только для чтения. Виджет периодически увеличивает значение этой опции, когда его значение больше 0 и, в режиме «determinate», меньше maximum. Эта опция может использоваться текущей темой для дополнительных анимационных эффектов.
24.2.6.2. ttk.Progressbar¶
- class tkinter.ttk.Progressbar¶
- start(interval=None)¶
Начинает режим автоматического увеличения: планирует повторяющееся событие таймера, которое вызывает Progressbar.step() каждые interval миллисекунд. Если опущено, interval по умолчанию равен 50 миллисекундам.
- step(amount=None)¶
Увеличивает значение индикатора выполнения на amount.
amount по умолчанию равен 1.0, если не указан.
- stop()¶
Останавливает режим автоматического приращения: отменяет любое повторяющееся событие таймера, запущенное с помощью Progressbar.start() для этого индикатора выполнения.
24.2.7. Separator¶
Виджет ttk.Separator отображает горизонтальную или вертикальную разделительную линию.
У него нет других методов, кроме унаследованных от ttk.Widget.
24.2.7.1. Параметры¶Options
Этот виджет принимает следующую специфическую опцию:
опция описание ориентация Одно из «horizontal» или «vertical». Указывает ориентацию разделителя.
24.2.8. Sizegrip¶
Виджет ttk.Sizegrip (также известный как «grow box») позволяет изменять размер содержащего его окна верхнего уровня, нажимая и перетаскивая захват.
Этот виджет не имеет ни особых параметров, ни особых методов, кроме унаследованных от ttk.Widget.
24.2.8.1. Примечания по платформам¶Platform-specific notes
- В MacOS X окна верхнего уровня по умолчанию автоматически содержат встроенный захват размера. Добавление Sizegrip безвредно, так как встроенный захват просто скроет виджет.
24.2.8.2. Ошибки¶Bugs
- Если положение содержащего окна верхнего уровня было задано относительно правого или нижнего края экрана (например, ....), виджет Sizegrip не изменит размер окна.
- Этот виджет поддерживает только изменение размера в направлении «southeast».
24.2.9. Treeview¶
Виджет ttk.Treeview отображает иерархическую коллекцию элементов. Каждый элемент имеет текстовую метку, необязательное изображение и необязательный список значений данных. Значения данных отображаются в последовательных столбцах после метки дерева.
Порядок отображения значений данных можно контролировать, задавая параметр виджета displaycolumns. Виджет дерева также может отображать заголовки столбцов. Столбцы могут быть доступны по номеру или символьным именам, перечисленным в параметре виджета columns. См. Идентификаторы столбцов.
Каждый элемент идентифицируется уникальным именем. Виджет сгенерирует идентификаторы элементов, если они не предоставлены вызывающим. Существует особый корневой элемент с именем {}. Сам корневой элемент не отображается; его дочерние элементы появляются на верхнем уровне иерархии.
Каждый элемент также имеет список тегов, которые можно использовать для связывания событий с отдельными элементами и управления внешним видом элемента.
Виджет 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 tkinter.ttk.Treeview¶
- bbox(item, column=None)¶
Возвращает ограничивающую рамку (относительно окна виджета treeview) указанного элемента в формате (x, y, width, height).
Если указан столбец, возвращается ограничивающая рамка этой ячейки. Если элемент не виден (т.е. является потомком закрытого элемента или находится за пределами экрана при прокрутке), возвращается пустая строка.
- get_children(item=None)¶
Возвращает список дочерних элементов, принадлежащих элементу.
Если элемент не указан, возвращает корневые дочерние элементы.
- set_children(item, *newchildren)¶
Заменяет дочерний элемент item на newchildren.
Дочерние элементы, присутствующие в item, но отсутствующие в newchildren, отсоединяются от дерева. Ни один элемент в newchildren не может быть предком item. Обратите внимание, что если не указать newchildren, это приведет к отсоединению дочерних элементов item.
- column(column, option=None, **kw)¶
Запрашивает или изменяет параметры для указанного столбца.
Если kw не передан, возвращает словарь значений параметров столбца. Если указан параметр, возвращается значение этого параметра. В противном случае устанавливает параметры в соответствующие значения.
Допустимые параметры/значения:
- идентификатор
Возвращает имя столбца. Это параметр только для чтения.
- anchor: одно из стандартных значений привязки Tk.
Определяет, как должен быть выровнен текст в этом столбце относительно ячейки.
- minwidth: ширина
Минимальная ширина столбца в пикселях. Виджет treeview не сделает столбец уже, чем указано этим параметром, при изменении размера виджета или перетаскивании столбца пользователем.
- растяжение: True/False
Определяет, должна ли ширина столбца изменяться при изменении размера виджета.
- width: ширина
Ширина столбца в пикселях.
Чтобы настроить столбец дерева, вызовите этот метод с column = “#0”.
- delete(*items)¶
Удаляет все указанные items и всех их потомков.
Корневой элемент не может быть удалён.
- detach(*items)¶
Открепляет все указанные items от дерева.
Элементы и все их потомки по-прежнему существуют и могут быть повторно вставлены в другое место дерева, но не будут отображаться.
Корневой элемент не может быть откреплён.
- exists(item)¶
Возвращает True, если указанный item присутствует в дереве.
- focus(item=None)¶
Если указан item, устанавливает элемент фокуса на item. В противном случае возвращает текущий элемент фокуса или '' (пустую строку), если его нет.
- heading(column, option=None, **kw)¶
Запрашивает или изменяет параметры заголовка для указанного column.
Если kw не указан, возвращает словарь значений параметров заголовка. Если указан 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)¶
Возвращает идентификатор предыдущего родственного элемента item или пустую строку '', если item является первым дочерним элементом своего родителя.
- reattach(item, parent, index)¶
Псевдоним для Treeview.move().
- see(item)¶
Обеспечивает видимость элемента.
Устанавливает для всех предков item параметр open в True и при необходимости прокручивает виджет, чтобы item оказался в видимой части дерева.
- 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=None)¶
Если указан элемент, возвращает 1 или 0 в зависимости от того, имеет ли указанный элемент заданное имя тега. В противном случае возвращает список всех элементов, имеющих указанный тег.
Доступность: Tk 8.6
- xview(*args)¶
Запрашивает или изменяет горизонтальное положение treeview.
- yview(*args)¶
Запрашивает или изменяет вертикальное положение treeview.
24.2.10. Стилизация 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')], то, например, результатом будет синий цвет текста, когда виджет находится в состояниях active или pressed.
- 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>>.
24.2.10.1. Компоновки¶Layouts
Компоновка (layout) может быть просто None, если она не принимает параметров, или словарём параметров, определяющих, как расположить элемент. Механизм компоновки использует упрощённую версию менеджера геометрии pack: для заданной начальной области каждый элемент получает свой участок. Допустимые параметры/значения:
- side: whichside
Указывает, с какой стороны области размещать элемент; одно из значений: top, right, bottom или left. Если не указано, элемент занимает всю область.
- sticky: nswe
Указывает, где размещается элемент внутри выделенной ему части.
- unit: 0 or 1
Если установлено в 1, заставляет элемент и всех его потомков рассматривать как единый элемент для целей Widget.identify() и т.д. Используется для таких вещей, как ползунки полосы прокрутки с захватами.
- children: [sublayout... ]
Задаёт список элементов для размещения внутри элемента. Каждый элемент – это кортеж (или другой тип последовательности), где первый элемент – название компоновки, а второй – Layout.