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

tkinter.ttk.md

1055 строк · 69.7 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.1/library/tkinter.ttk.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 24.2. `tkinter.ttk` – Тематические виджеты Tk89Модуль `tkinter.ttk` предоставляет доступ к набору тематических виджетов Tk, появившемуся в Tk 8.5. Если Python не был скомпилирован с Tk 8.5, к этому модулю всё равно можно получить доступ при условии установки *Tile*. Первый способ (с использованием Tk 8.5) предоставляет дополнительные возможности, включая сглаживание шрифтов в X11 и прозрачность окон (требует композитного оконного менеджера в X11).1011Основная идея `tkinter.ttk` заключается в том, чтобы максимально разделить код, реализующий поведение виджета, и код, отвечающий за его внешний вид.1213> **См. также**14>15> **[Поддержка стилизации виджетов Tk](https://python-all.ru/3.1/library/tkinter.ttk.html)**16>17> Документ, представляющий поддержку тем для Tk1819## 24.2.1. Использование Ttk2021Чтобы начать использовать Ttk, импортируйте его модуль:2223```python24from tkinter import ttk25```2627Чтобы переопределить базовые виджеты Tk, импорт должен следовать после импорта Tk:2829```python30from tkinter import *31from tkinter.ttk import *32```3334Этот код приводит к тому, что несколько виджетов `tkinter.ttk` (`Button`, `Checkbutton`, `Entry`, `Frame`, `Label`, `LabelFrame`, `Menubutton`, `PanedWindow`, `Radiobutton`, `Scale` и `Scrollbar`) автоматически заменяют стандартные виджеты Tk.3536Это даёт прямое преимущество в использовании новых виджетов, которые обеспечивают лучший внешний вид и ощущение на всех платформах; однако заменяющие виджеты не полностью совместимы. Основное отличие в том, что такие параметры виджетов, как «fg», «bg» и другие, связанные со стилизацией виджетов, больше не присутствуют в виджетах Ttk. Вместо этого используйте класс `ttk.Style` для улучшенных эффектов стилизации.3738> **См. также**39>40> **[Конвертация существующих приложений для использования виджетов Tile](https://python-all.ru/3.1/library/tkinter.ttk.html)**41>42> Монография (с использованием терминологии Tcl) о различиях, обычно возникающих при переносе приложений на использование новых виджетов.4344## 24.2.2. Виджеты Ttk4546Ttk поставляется с 17 виджетами, одиннадцать из которых уже существовали в tkinter: `Button`, `Checkbutton`, `Entry`, `Frame`, `Label`, `LabelFrame`, `Menubutton`, `PanedWindow`, `Radiobutton`, `Scale` и `Scrollbar`. Остальные шесть – новые: [`Combobox`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Combobox), [`Notebook`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Notebook), [`Progressbar`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Progressbar), `Separator`, `Sizegrip` и [`Treeview`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Treeview). И все они являются подклассами [`Widget`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Widget).4748Использование виджетов Ttk придаёт приложению улучшенный внешний вид и ощущение. Как обсуждалось выше, существуют различия в том, как кодируется стилизация.4950Код Tk:5152```python53l1 = tkinter.Label(text="Test", fg="black", bg="white")54l2 = tkinter.Label(text="Test", fg="black", bg="white")55```5657Код Ttk:5859```python60style = ttk.Style()61style.configure("BW.TLabel", foreground="black", background="white")6263l1 = ttk.Label(text="Test", style="BW.TLabel")64l2 = ttk.Label(text="Test", style="BW.TLabel")65```6667Для получения дополнительной информации о [TtkStyling](https://python-all.ru/3.1/library/tkinter.ttk.html#ttkstyling) обратитесь к документации класса [`Style`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Style).6869## 24.2.3. Виджет7071`ttk.Widget` определяет стандартные параметры и методы, поддерживаемые темизированными виджетами Tk, и не предназначен для прямого создания экземпляров.7273### 24.2.3.1. Стандартные опции7475Все виджеты `ttk` принимают следующие параметры:7677> | Параметр | Описание |78> | --- | --- |79> | класс | Задает класс окна. Класс используется при запросе базы данных параметров для других опций окна, для определения тегов привязки по умолчанию и для выбора стандартного макета и стиля виджета. Это свойство только для чтения, которое может быть задано только при создании окна. |80> | курсор | Задает курсор мыши, используемый для виджета. Если установлено в пустую строку (по умолчанию), курсор наследуется от родительского виджета. |81> | takefocus | Определяет, принимает ли окно фокус при навигации с клавиатуры. Возвращается 0, 1 или пустая строка. Если возвращается 0, это означает, что окно должно быть полностью пропущено при навигации. Если 1 – окно должно получать фокус ввода, пока оно видимо. Пустая строка означает, что скрипты навигации сами решают, ставить ли фокус на это окно. |82> | стиль | Может использоваться для указания пользовательского стиля виджета. |8384### 24.2.3.2. Опции прокручиваемых виджетов8586Следующие параметры поддерживаются виджетами, управляемыми полосой прокрутки.8788> | опция | описание |89> | --- | --- |90> | xscrollcommand | Используется для взаимодействия с горизонтальными полосами прокрутки. Когда представление в окне виджета изменяется, виджет генерирует команду Tcl на основе scrollcommand. Обычно этот параметр состоит из метода `Scrollbar.set()` некоторого ползунка прокрутки. Это приведёт к обновлению ползунка прокрутки при каждом изменении вида в окне. |91> | yscrollcommand | Используется для взаимодействия с вертикальными полосами прокрутки. Дополнительные сведения см. выше. |9293### 24.2.3.3. Опции Label9495Следующие параметры поддерживаются метками, кнопками и другими виджетами, похожими на кнопки.9697> | опция | описание |98> | --- | --- |99> | текст | Задаёт текстовую строку для отображения внутри виджета. |100> | textvariable | Задаёт имя, значение которого будет использоваться вместо ресурса параметра text. |101> | подчёркивание | Если задан, указывает индекс (начиная с 0) символа для подчёркивания в текстовой строке. Подчёркнутый символ используется для мнемонической активации. |102> | изображение | Определяет изображение для отображения. Это список из одного или более элементов. Первый элемент – имя изображения по умолчанию. Остальная часть списка – последовательность пар спецификация\_состояния/значение, как определено в [`Style.map()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Style.map), задающая различные изображения для использования, когда виджет находится в определённом состоянии или комбинации состояний. Все изображения в списке должны быть одного размера. |103> | составной | Определяет способ отображения изображения относительно текста, когда присутствуют оба параметра text и image. Допустимые значения: text: отображать только текст image: отображать только изображение top, bottom, left, right: отображать изображение соответственно над текстом, под текстом, слева от текста или справа от текста. none: по умолчанию. Отображать изображение, если оно есть, в противном случае – текст. |104> | ширина | Если больше нуля, указывает, сколько места в ширину символа выделить для текстовой метки. Если меньше нуля – задаёт минимальную ширину. Если ноль или не указано, используется естественная ширина текстовой метки. |105106### 24.2.3.4. Опции совместимости107108> | опция | описание |109> | --- | --- |110> | состояние | Может быть установлено в «normal» или «disabled» для управления битом состояния «disabled». Это опция только для записи: её установка изменяет состояние виджета, но метод [`Widget.state()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Widget.state) не влияет на эту опцию. |111112### 24.2.3.5. Состояния виджета113114Состояние виджета – это битовая маска независимых флагов состояния.115116> | флаг | описание |117> | --- | --- |118> | активно | Курсор мыши находится над виджетом, и нажатие кнопки мыши вызовет некоторое действие. |119> | отключено | Виджет отключен программно. |120> | фокус | Виджет имеет фокус ввода с клавиатуры. |121> | нажато | Виджет находится в нажатом состоянии. |122> | выбрано | «Вкл», «истина» или «текущий» для таких элементов, как Checkbutton и Radiobutton. |123> | фон | В Windows и Mac есть понятие «активного» окна или окна переднего плана. Состояние *background* устанавливается для виджетов в фоновом окне и сбрасывается для виджетов в окне переднего плана. |124> | только для чтения | Виджет не должен допускать изменения пользователем. |125> | альтернативное | Альтернативный формат отображения, специфичный для виджета. |126> | недопустимое | Значение виджета недопустимо. |127128Спецификация состояния – это последовательность имён состояний, опционально с префиксом в виде восклицательного знака, указывающим, что бит сброшен.129130### 24.2.3.6. ttk.Widget131132Помимо методов, описанных ниже, `ttk.Widget` поддерживает методы `tkinter.Widget.cget()` и `tkinter.Widget.configure()`.133134#### `class tkinter.ttk.Widget`135136#### `identify(x, y)`137138Возвращает имя элемента в позиции *x* *y* или пустую строку, если точка не находится ни в одном элементе.139140*x* и *y* – это координаты в пикселях относительно виджета.141142#### `instate(statespec, callback=None, *args, **kw)`143144Проверяет состояние виджета. Если колбэк не указан, возвращает True если состояние виджета соответствует145146*statespec*147148, и False в противном случае. Если колбэк указан, он вызывается с args, если состояние виджета соответствует149150*statespec*151152.153154#### `state(statespec=None)`155156Изменяет или запрашивает состояние виджета. Если157158*statespec*159160указан, устанавливает состояние виджета в соответствии с ним и возвращает новый161162*statespec*163164, указывающий, какие флаги были изменены. Если165166*statespec*167168не указан, возвращает текущие включенные флаги состояния.169170*statespec* обычно является списком или кортежем.171172## 24.2.4. Combobox173174Виджет `ttk.Combobox` объединяет текстовое поле с выпадающим списком значений. Этот виджет является подклассом `Entry`.175176Помимо методов, унаследованных от [`Widget`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Widget): `Widget.cget()`, `Widget.configure()`, [`Widget.identify()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Widget.identify), [`Widget.instate()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Widget.instate) и [`Widget.state()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Widget.state), а также следующих, унаследованных от `Entry`: `Entry.bbox()`, `Entry.delete()`, `Entry.icursor()`, `Entry.index()`, `Entry.inset()`, `Entry.selection()`, `Entry.xview()`, у него есть и другие методы, описанные в `ttk.Combobox`.177178### 24.2.4.1. Опции179180Этот виджет принимает следующие специфические параметры:181182> | опция | описание |183> | --- | --- |184> | exportselection | Булево значение. Если установлено, выделение виджета связывается с выделением оконного менеджера (которое может быть получено вызовом Misc.selection\_get, например). |185> | выравнивание | Определяет выравнивание текста внутри виджета. Одно из значений: “left”, “center” или “right”. |186> | рост | Определяет высоту выпадающего списка в строках. |187> | postcommand | Скрипт (возможно, зарегистрированный с помощью Misc.register), который вызывается непосредственно перед отображением значений. Он может определять, какие значения отображать. |188> | состояние | Одно из значений: "normal", "readonly" или "disabled". В состоянии "readonly" значение не может быть отредактировано напрямую, и пользователь может только выбирать значения из выпадающего списка. В состоянии "normal" текстовое поле доступно для редактирования. В состоянии "disabled" взаимодействие невозможно. |189> | textvariable | Указывает имя, значение которого связано со значением виджета. Когда значение, связанное с этим именем, изменяется, значение виджета обновляется, и наоборот. См. `tkinter.StringVar`. |190> | значения | Определяет список значений для отображения в выпадающем списке. |191> | ширина | Определяет целое число, указывающее желаемую ширину окна ввода, в символах среднего размера шрифта виджета. |192193### 24.2.4.2. Виртуальные события194195Виджет комбобокс генерирует виртуальное событие **\<\<ComboboxSelected\>\>**, когда пользователь выбирает элемент из списка значений.196197### 24.2.4.3. ttk.Combobox198199#### `class tkinter.ttk.Combobox`200201#### `current(newindex=None)`202203Если указан204205*newindex*206207, устанавливает значение комбобокса на элемент с позицией208209*newindex*210211. В противном случае возвращает индекс текущего значения или -1, если текущее значение отсутствует в списке значений.212213#### `get()`214215Возвращает текущее значение комбобокса.216217#### `set(value)`218219Устанавливает значение комбобокса в220221*value*222223.224225## 24.2.5. Notebook226227Виджет Ttk Notebook управляет набором окон и показывает по одному за раз. Каждое дочернее окно связано с вкладкой; пользователь может выбрать вкладку, чтобы изменить отображаемое окно.228229### 24.2.5.1. Опции230231Этот виджет принимает следующие специфические параметры:232233> | опция | описание |234> | --- | --- |235> | рост | Если присутствует и больше нуля, задает желаемую высоту области панели (не включая внутренние отступы или вкладки). В противном случае используется максимальная высота всех панелей. |236> | отступы | Задает величину дополнительного пространства, добавляемого вокруг блокнота. Отступы представляют собой список из не более чем четырех спецификаций длины: слева, сверху, справа, снизу. Если указано менее четырех элементов, значение снизу по умолчанию равно верхнему, справа – левому, а верхнее – левому. |237> | ширина | Если присутствует и больше нуля, задаёт желаемую ширину области панели (без учёта внутреннего отступа). В противном случае используется максимальная ширина всех панелей. |238239### 24.2.5.2. Опции вкладок240241Также существуют специальные параметры для вкладок:242243> | опция | описание |244> | --- | --- |245> | состояние | Может быть «normal», «disabled» или «hidden». Если «disabled», то вкладка не выбирается. Если «hidden», то вкладка не отображается. |246> | привязка | Определяет, как дочернее окно позиционируется в области панели. Значение – строка, содержащая ноль или более символов “n”, “s”, “e” или “w”. Каждая буква обозначает сторону (север, юг, восток или запад), к которой будет прикрепляться дочернее окно, в соответствии с `grid()` – менеджером геометрии. |247> | отступы | Задаёт величину дополнительного пространства между блокнотом и данной панелью. Синтаксис такой же, как для параметра padding, используемого этим виджетом. |248> | текст | Задаёт текст, отображаемый на вкладке. |249> | изображение | Определяет изображение для отображения на вкладке. См. опцию image, описанную в [`Widget`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Widget). |250> | составной | Определяет, как отображать изображение относительно текста, если присутствуют оба параметра text и image. Допустимые значения см. в [Параметры метки](https://python-all.ru/3.1/library/tkinter.ttk.html#label-options). |251> | подчёркивание | Определяет индекс (с нуля) символа для подчёркивания в текстовой строке. Подчёркнутый символ используется для мнемонической активации, если вызывается [`Notebook.enable_traversal()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Notebook.enable_traversal). |252253### 24.2.5.3. Идентификаторы вкладок254255Параметр tab\_id, присутствующий в нескольких методах `ttk.Notebook`, может принимать любую из следующих форм:256257- Целое число от нуля до количества вкладок258- Имя дочернего окна259- Позиционное указание вида «@x,y», идентифицирующее вкладку260- Литеральная строка «current», которая идентифицирует текущую выбранную вкладку261- Строковый литерал “end”, который возвращает количество вкладок (действителен только для [`Notebook.index()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Notebook.index))262263### 24.2.5.4. Виртуальные события264265Этот виджет генерирует виртуальное событие **\<\<NotebookTabChanged\>\>** после выбора новой вкладки.266267### 24.2.5.5. ttk.Notebook268269#### `class tkinter.ttk.Notebook`270271#### `add(child, **kw)`272273Добавляет новую вкладку в блокнот.274275Если окно в данный момент управляется блокнотом, но скрыто, оно восстанавливается на свою предыдущую позицию.276277Список доступных опций см. в [Tab Options](https://python-all.ru/3.1/library/tkinter.ttk.html#tab-options).278279#### `forget(tab_id)`280281Удаляет вкладку, указанную282283*tab\_id*284285, снимает с отображения и управления связанное окно.286287#### `hide(tab_id)`288289Скрывает вкладку, указанную *tab\_id*.290291Вкладка не будет отображаться, но связанное окно остаётся управляемым блокнотом, а его конфигурация запоминается. Скрытые вкладки можно восстановить с помощью команды [`add()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Notebook.add).292293#### `identify(x, y)`294295Возвращает имя элемента вкладки в позиции296297*x*298299,300301*y*302303или пустую строку, если элемент отсутствует.304305#### `index(tab_id)`306307Возвращает числовой индекс вкладки, указанной308309*tab\_id*310311, или общее количество вкладок, если312313*tab\_id*314315равно строке «end».316317#### `insert(pos, child, **kw)`318319Вставляет панель в указанную позицию.320321*pos* может быть строкой «end», целочисленным индексом или именем дочернего элемента, находящегося под управлением. Если *child* уже управляется блокнотом, он перемещается в указанную позицию.322323Список доступных опций см. в [Tab Options](https://python-all.ru/3.1/library/tkinter.ttk.html#tab-options).324325#### `select(tab_id=None)`326327Выбирает указанную *tab\_id*.328329Будет отображено связанное дочернее окно, а ранее выбранное окно (если оно отличается) будет скрыто. Если *tab\_id* не указан, возвращается имя виджета текущей выбранной панели.330331#### `tab(tab_id, option=None, **kw)`332333Запрашивает или изменяет параметры указанной *tab\_id*.334335Если *kw* не указан, возвращает словарь значений опций вкладки. Если указан *option*, возвращает значение этой *option*. В противном случае устанавливает опции в соответствующие значения.336337#### `tabs()`338339Возвращает список окон, управляемых Notebook.340341#### `enable_traversal()`342343Включает навигацию с клавиатуры для окна верхнего уровня, содержащего этот блокнот.344345Это расширяет привязки для окна верхнего уровня, содержащего блокнот, следующим образом:346347- Control-Tab: выбирает вкладку, следующую за выбранной в данный момент.348- Shift-Control-Tab: выбирает вкладку, предшествующую выбранной в данный момент.349- Alt-K: где K – мнемонический (подчеркнутый) символ любой вкладки, выбирает эту вкладку.350351Несколько виджетов Notebook в одном окне верхнего уровня могут быть включены для навигации,\\nвключая вложенные Notebook. Однако навигация по Notebook работает\\nкорректно, только если все панели имеют тот Notebook, в котором они находятся, в качестве родительского виджета.352353## 24.2.6. Progressbar354355Виджет `ttk.Progressbar` показывает состояние длительной операции. Он может работать в двух режимах: 1) детерминированный режим, который показывает объём выполненной работы относительно общего объёма работы, и 2) недетерминированный режим, который предоставляет анимированное отображение, чтобы пользователь знал, что работа выполняется.356357### 24.2.6.1. Параметры358359Этот виджет принимает следующие специфические параметры:360361> | опция | описание |362> | --- | --- |363> | ориентация | Одно из «horizontal» или «vertical». Указывает ориентацию индикатора выполнения. |364> | длина | Указывает длину длинной оси индикатора выполнения (ширину, если горизонтальный, и высоту, если вертикальный). |365> | Режим | Одно из «determinate» или «indeterminate». |366> | максимум | Число, задающее максимальное значение. По умолчанию равно 100. |367> | значение | Текущее значение индикатора выполнения. В режиме «determinate» представляет объём выполненной работы. В режиме «indeterminate» интерпретируется как по модулю *maximum*; то есть индикатор выполнения завершает один «цикл», когда его значение увеличивается на *maximum*. |368> | переменная | Имя, связанное со значением опции. Если задано, значение индикатора выполнения автоматически устанавливается равным значению этого имени при каждом его изменении. |369> | фаза | Опция только для чтения. Виджет периодически увеличивает значение этой опции, когда его значение больше 0 и, в режиме «determinate», меньше maximum. Эта опция может использоваться текущей темой для дополнительных анимационных эффектов. |370371### 24.2.6.2. ttk.Progressbar372373#### `class tkinter.ttk.Progressbar`374375#### `start(interval=None)`376377Начинает режим автоматического увеличения: планирует повторяющееся событие таймера, которое вызывает378379[`Progressbar.step()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Progressbar.step)380381каждые382383*interval*384385миллисекунд. Если опущено,386387*interval*388389по умолчанию равен 50 миллисекундам.390391#### `step(amount=None)`392393Увеличивает значение индикатора выполнения на *amount*.394395*amount* по умолчанию равен 1.0, если не указан.396397#### `stop()`398399Останавливает режим автоматического приращения: отменяет любое повторяющееся событие таймера, запущенное с помощью400401[`Progressbar.start()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Progressbar.start)402403для этого индикатора выполнения.404405## 24.2.7. Separator406407Виджет `ttk.Separator` отображает горизонтальную или вертикальную разделительную линию.408409У него нет других методов, кроме унаследованных от `ttk.Widget`.410411### 24.2.7.1. Параметры412413Этот виджет принимает следующую специфическую опцию:414415> | опция | описание |416> | --- | --- |417> | ориентация | Одно из «horizontal» или «vertical». Указывает ориентацию разделителя. |418419## 24.2.8. Sizegrip420421Виджет `ttk.Sizegrip` (также известный как «grow box») позволяет изменять размер содержащего его окна верхнего уровня, нажимая и перетаскивая захват.422423Этот виджет не имеет ни особых параметров, ни особых методов, кроме унаследованных от `ttk.Widget`.424425### 24.2.8.1. Примечания по платформам426427- В MacOS X окна верхнего уровня по умолчанию автоматически содержат встроенный захват размера. Добавление `Sizegrip` безвредно, так как встроенный захват просто скроет виджет.428429### 24.2.8.2. Ошибки430431- Если положение содержащего окна верхнего уровня было задано относительно правого или нижнего края экрана (например, ....), виджет `Sizegrip` не изменит размер окна.432- Этот виджет поддерживает только изменение размера в направлении «southeast».433434## 24.2.9. Treeview435436Виджет `ttk.Treeview` отображает иерархическую коллекцию элементов. Каждый элемент имеет текстовую метку, необязательное изображение и необязательный список значений данных. Значения данных отображаются в последовательных столбцах после метки дерева.437438Порядок отображения значений данных можно контролировать, задавая параметр виджета `displaycolumns`. Виджет дерева также может отображать заголовки столбцов. Столбцы могут быть доступны по номеру или символьным именам, перечисленным в параметре виджета columns. См. [Идентификаторы столбцов](https://python-all.ru/3.1/library/tkinter.ttk.html#column-identifiers).439440Каждый элемент идентифицируется уникальным именем. Виджет сгенерирует идентификаторы элементов, если они не предоставлены вызывающим. Существует особый корневой элемент с именем `{}`. Сам корневой элемент не отображается; его дочерние элементы появляются на верхнем уровне иерархии.441442Каждый элемент также имеет список тегов, которые можно использовать для связывания событий с отдельными элементами и управления внешним видом элемента.443444Виджет Treeview поддерживает горизонтальную и вертикальную прокрутку в соответствии с параметрами, описанными в [Параметры прокручиваемых виджетов](https://python-all.ru/3.1/library/tkinter.ttk.html#scrollable-widget-options), и методами [`Treeview.xview()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Treeview.xview) и [`Treeview.yview()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Treeview.yview).445446### 24.2.9.1. Параметры447448Этот виджет принимает следующие специфические параметры:449450> | опция | описание |451> | --- | --- |452> | столбцы | Список идентификаторов столбцов, определяющий количество столбцов и их имена. |453> | отображаемые столбцы | Список идентификаторов столбцов (символьных или целочисленных индексов), определяющий, какие столбцы данных отображаются и в каком порядке они появляются, или строка «#all». |454> | рост | Определяет количество строк, которые должны быть видны. Примечание: запрошенная ширина определяется суммой ширин столбцов. |455> | отступы | Определяет внутренний отступ виджета. Отступ – это список из не более чем четырёх спецификаций длины. |456> | режим выбора | Управляет тем, как встроенные привязки класса управляют выделением. Одно из значений: «extended», «browse» или «none». Если установлено «extended» (по умолчанию), можно выбрать несколько элементов. Если «browse», единовременно выбирается только один элемент. Если «none», выделение не будет изменяться. Обратите внимание, что код приложения и привязки тегов могут установить выделение по своему усмотрению, независимо от значения этой опции. |457> | отображение | Список, содержащий ноль или более следующих значений, определяющий, какие элементы дерева отображать. tree: отображать метки дерева в столбце #0. headings: отображать строку заголовков. По умолчанию отображаются «tree headings», т.е. показываются все элементы. **Примечание**: столбец #0 всегда относится к столбцу дерева, даже если show=«tree» не указано. |458459### 24.2.9.2. Параметры элементов460461Следующие опции элементов могут быть указаны для элементов в командах виджета insert и item.462463> | опция | описание |464> | --- | --- |465> | текст | Текстовая метка, отображаемая для элемента. |466> | изображение | Изображение Tk, отображаемое слева от метки. |467> | значения | Список значений, связанных с элементом. Каждый элемент должен содержать столько же значений, сколько столбцов в опции columns виджета. Если значений меньше, чем столбцов, оставшиеся значения считаются пустыми. Если значений больше, чем столбцов, лишние значения игнорируются. |468> | открыт | Значение True/False, указывающее, должны ли дочерние элементы отображаться или быть скрытыми. |469> | теги | Список тегов, связанных с этим элементом. |470471### 24.2.9.3. Параметры тегов472473Для тегов могут быть указаны следующие опции:474475> | опция | описание |476> | --- | --- |477> | передний план | Определяет цвет текста. |478> | фон | Определяет цвет фона ячейки или элемента. |479> | шрифт | Определяет шрифт, используемый при отрисовке текста. |480> | изображение | Определяет изображение элемента, если опция image элемента пуста. |481482### 24.2.9.4. Идентификаторы столбцов483484Идентификаторы столбцов могут принимать одну из следующих форм:485486- Символическое имя из списка опции columns.487- Целое число n, указывающее n-й столбец данных.488- Строка вида #n, где n – целое число, указывающая n-й столбец отображения.489490Примечания:491492- Значения опций элемента могут отображаться в порядке, отличном от порядка, в котором они хранятся.493- Столбец #0 всегда ссылается на столбец дерева, даже если show="tree" не указан.494495Номер столбца данных – это индекс в списке значений опций элемента; номер столбца отображения – это номер столбца в дереве, где отображаются значения. Метки дерева отображаются в столбце #0. Если опция displaycolumns не задана, то столбец данных n отображается в столбце #n+1. И снова, **столбец #0 всегда ссылается на столбец дерева**.496497### 24.2.9.5. Виртуальные события498499Виджет Treeview генерирует следующие виртуальные события.500501> | событие | описание |502> | --- | --- |503> | \<\<TreeviewSelect\>\> | Генерируется при каждом изменении выделения. |504> | \<\<TreeviewOpen\>\> | Генерируется непосредственно перед установкой элемента фокуса в open=True. |505> | \<\<TreeviewClose\>\> | Генерируется сразу после установки элемента фокуса в open=False. |506507Методы [`Treeview.focus()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Treeview.focus) и [`Treeview.selection()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Treeview.selection) можно использовать для определения затронутого элемента или элементов.508509### 24.2.9.6. ttk.Treeview510511#### `class tkinter.ttk.Treeview`512513#### `bbox(item, column=None)`514515Возвращает ограничивающую рамку (относительно окна виджета treeview) указанного *элемента* в формате (x, y, width, height).516517Если указан *столбец*, возвращается ограничивающая рамка этой ячейки. Если *элемент* не виден (т.е. является потомком закрытого элемента или находится за пределами экрана при прокрутке), возвращается пустая строка.518519#### `get_children(item=None)`520521Возвращает список дочерних элементов, принадлежащих *элементу*.522523Если *элемент* не указан, возвращает корневые дочерние элементы.524525#### `set_children(item, *newchildren)`526527Заменяет дочерний элемент *item* на *newchildren*.528529Дочерние элементы, присутствующие в *item*, но отсутствующие в *newchildren*, отсоединяются от дерева. Ни один элемент в *newchildren* не может быть предком *item*. Обратите внимание, что если не указать *newchildren*, это приведет к отсоединению дочерних элементов *item*.530531#### `column(column, option=None, **kw)`532533Запрашивает или изменяет параметры для указанного *столбца*.534535Если *kw* не передан, возвращает словарь значений параметров столбца. Если указан *параметр*, возвращается значение этого *параметра*. В противном случае устанавливает параметры в соответствующие значения.536537Допустимые параметры/значения:538539- **идентификатор**540541  Возвращает имя столбца. Это параметр только для чтения.542- **anchor: одно из стандартных значений привязки Tk.**543544  Определяет, как должен быть выровнен текст в этом столбце относительно ячейки.545- **minwidth: ширина**546547  Минимальная ширина столбца в пикселях. Виджет treeview не сделает столбец уже, чем указано этим параметром, при изменении размера виджета или перетаскивании столбца пользователем.548- **растяжение: True/False**549550  Определяет, должна ли ширина столбца изменяться при изменении размера виджета.551- **width: ширина**552553  Ширина столбца в пикселях.554555Чтобы настроить столбец дерева, вызовите этот метод с column = “#0”.556557#### `delete(*items)`558559Удаляет все указанные *items* и всех их потомков.560561Корневой элемент не может быть удалён.562563#### `detach(*items)`564565Открепляет все указанные *items* от дерева.566567Элементы и все их потомки по-прежнему существуют и могут быть повторно вставлены в другое место дерева, но не будут отображаться.568569Корневой элемент не может быть откреплён.570571#### `exists(item)`572573Возвращает True, если указанный574575*item*576577присутствует в дереве.578579#### `focus(item=None)`580581Если указан582583*item*584585, устанавливает элемент фокуса на586587*item*588589. В противном случае возвращает текущий элемент фокуса или '' (пустую строку), если его нет.590591#### `heading(column, option=None, **kw)`592593Запрашивает или изменяет параметры заголовка для указанного *column*.594595Если *kw* не указан, возвращает словарь значений параметров заголовка. Если указан *option*, возвращается значение для этого *option*. В противном случае устанавливает параметры в соответствующие значения.596597Допустимые параметры/значения:598599- **text: текст**600601  Текст, отображаемый в заголовке столбца.602- **изображение: imageName**603604  Указывает изображение, отображаемое справа от заголовка столбца.605- **привязка: anchor**606607  Указывает, как должен быть выровнен текст заголовка. Одно из стандартных значений привязки Tk.608- **command: колбэк**609610  Колбэк, вызываемый при нажатии на метку заголовка.611612Для настройки заголовка столбца дерева вызовите этот метод с column = "#0".613614#### `identify(component, x, y)`615616Возвращает описание указанного617618*component*619620в точке, заданной621622*x*623624и625626*y*627628, или пустую строку, если такой629630*component*631632отсутствует в этой позиции.633634#### `identify_row(y)`635636Возвращает идентификатор элемента в позиции637638*y*639640.641642#### `identify_column(x)`643644Возвращает идентификатор столбца данных ячейки в позиции *x*.645646Столбец дерева имеет ID #0.647648#### `identify_region(x, y)`649650Возвращает одно из:651652| регион | значение |653| --- | --- |654| заголовок | Область заголовка дерева. |655| разделитель | Промежуток между заголовками двух столбцов. |656| дерево | Область дерева. |657| ячейка | Ячейка данных. |658659Доступность: Tk 8.6.660661#### `identify_element(x, y)`662663Возвращает элемент в позиции *x*, *y*.664665Доступность: Tk 8.6.666667#### `index(item)`668669Возвращает целочисленный индекс670671*item*672673в списке дочерних элементов его родителя.674675#### `insert(parent, index, iid=None, **kw)`676677Создаёт новый элемент и возвращает идентификатор созданного элемента.678679*parent* – это идентификатор родительского элемента или пустая строка для создания нового элемента верхнего уровня. *index* – целое число или значение «end», указывающее, куда в списке дочерних элементов родителя вставить новый элемент. Если *index* меньше или равен нулю, новый узел вставляется в начало; если *index* больше или равен текущему количеству дочерних элементов, он вставляется в конец. Если указан *iid*, он используется в качестве идентификатора элемента; *iid* не должен уже существовать в дереве. В противном случае создаётся новый уникальный идентификатор.680681Смотрите [Параметры элементов](https://python-all.ru/3.1/library/tkinter.ttk.html#item-options) для списка доступных параметров.682683#### `item(item, option=None, **kw)`684685Запрашивает или изменяет параметры указанного *item*.686687Если параметры не заданы, возвращается словарь с парами параметр/значение для элемента. Если указан *option*, возвращается значение этого параметра. В противном случае устанавливает параметры в соответствии со значениями, переданными в *kw*.688689#### `move(item, parent, index)`690691Перемещает *item* на позицию *index* в списке дочерних элементов *parent*.692693Перемещать элемент под один из его потомков запрещено. Если *index* меньше или равен нулю, *item* перемещается в начало; если больше или равен количеству дочерних элементов, перемещается в конец. Если *item* был отсоединён, он повторно присоединяется.694695#### `next(item)`696697Возвращает идентификатор следующего родственного элемента698699*item*700701или пустую строку '', если702703*item*704705является последним дочерним элементом своего родителя.706707#### `parent(item)`708709Возвращает идентификатор родителя710711*элемента*712713или пустую строку, если714715*элемент*716717находится на верхнем уровне иерархии.718719#### `prev(item)`720721Возвращает идентификатор предыдущего родственного элемента722723*item*724725или пустую строку '', если726727*item*728729является первым дочерним элементом своего родителя.730731#### `reattach(item, parent, index)`732733Псевдоним для734735[`Treeview.move()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Treeview.move)736737.738739#### `see(item)`740741Обеспечивает видимость *элемента*.742743Устанавливает для всех предков *item* параметр open в True и при необходимости прокручивает виджет, чтобы *item* оказался в видимой части дерева.744745#### `selection(selop=None, items=None)`746747Если748749*selop*750751не указан, возвращает выбранные элементы. В противном случае действует в соответствии со следующими методами выбора.752753#### `selection_set(items)`754755*Элементы*756757становятся новым выделением.758759#### `selection_add(items)`760761Добавляет762763*элементы*764765в выделение.766767#### `selection_remove(items)`768769Удаляет770771*элементы*772773из выделения.774775#### `selection_toggle(items)`776777Переключает состояние выделения каждого элемента из778779*items*780781.782783#### `set(item, column=None, value=None)`784785С одним аргументом возвращает словарь пар столбец/значение для указанного786787*элемента*788789. С двумя аргументами возвращает текущее значение указанного790791*столбца*792793. С тремя аргументами устанавливает значение заданного794795*столбца*796797в заданном798799*элементе*800801равным указанному802803*значению*804805.806807#### `tag_bind(tagname, sequence=None, callback=None)`808809Привязывает колбэк к заданному событию810811*sequence*812813для тега814815*tagname*816817. Когда событие доставляется элементу, вызываются колбэки для каждого из тегов этого элемента.818819#### `tag_configure(tagname, option=None, **kw)`820821Запрашивает или изменяет параметры для указанного *tagname*.822823Если *kw* не указан, возвращает словарь настроек параметров для *tagname*. Если указан *option*, возвращает значение этого *параметра* для указанного *tagname*. В противном случае устанавливает параметры в соответствующие значения для заданного *tagname*.824825#### `tag_has(tagname, item=None)`826827Если указан *элемент*, возвращает 1 или 0 в зависимости от того, имеет ли указанный *элемент* заданное *имя тега*. В противном случае возвращает список всех элементов, имеющих указанный тег.828829Доступность: Tk 8.6830831#### `xview(*args)`832833Запрашивает или изменяет горизонтальное положение treeview.834835#### `yview(*args)`836837Запрашивает или изменяет вертикальное положение treeview.838839## 24.2.10. Стилизация Ttk840841Каждому виджету в `ttk` назначается стиль, который определяет набор элементов, составляющих виджет, их расположение, а также динамические и стандартные настройки параметров элементов. По умолчанию имя стиля – это имя класса виджета, но оно может быть переопределено параметром style виджета. Если имя класса виджета неизвестно, используйте метод `Misc.winfo_class()` (somewidget.winfo\_class()).842843> **См. также**844>845> **[Доклад на конференции Tcl 2004](https://python-all.ru/3.1/library/tkinter.ttk.html)**846>847> В этом документе объясняется, как работает механизм тем.848849#### `class tkinter.ttk.Style`850851Этот класс используется для управления базой данных стилей.852853#### `configure(style, query_opt=None, **kw)`854855Запрашивает или устанавливает значение по умолчанию для указанных параметров в *style*.856857Каждый ключ в *kw* является параметром, а каждое значение – строкой, определяющей значение этого параметра.858859Например, чтобы изменить все кнопки по умолчанию на плоские с отступами и другим цветом фона:860861```python862from tkinter import ttk863import tkinter864865root = tkinter.Tk()866867ttk.Style().configure("TButton", padding=6, relief="flat",868   background="#ccc")869870btn = ttk.Button(text="Sample")871btn.pack()872873root.mainloop()874```875876#### `map(style, query_opt=None, **kw)`877878Запрашивает или устанавливает динамические значения указанных параметров в *style*.879880Каждый ключ в *kw* является параметром, а каждое значение должно быть списком или кортежем (обычно), содержащим спецификации состояний (statespecs), сгруппированные в кортежи, списки или как-то иначе. Спецификация состояний – это комбинация одного или нескольких состояний, за которыми следует значение.881882Пример может прояснить это.883884```python885import tkinter886from tkinter import ttk887888root = tkinter.Tk()889890style = ttk.Style()891style.map("C.TButton",892    foreground=[('pressed', 'red'), ('active', 'blue')],893    background=[('pressed', '!disabled', 'black'), ('active', 'white')]894    )895896colored_btn = ttk.Button(text="Test", style="C.TButton").pack()897898root.mainloop()899```900901Обратите внимание, что порядок последовательностей (состояния, значение) для опции имеет значение: если в опции foreground порядок изменить на `[('active', 'blue'), ('pressed', 'red')]`, то, например, результатом будет синий цвет текста, когда виджет находится в состояниях active или pressed.902903#### `lookup(style, option, state=None, default=None)`904905Возвращает значение, указанное для параметра *option* в стиле *style*.906907Если указан параметр *state*, он должен быть последовательностью из одного или нескольких состояний. Если задан аргумент *default*, он используется как запасное значение, если спецификация для параметра не найдена.908909Чтобы проверить, какой шрифт использует Button по умолчанию:910911```python912from tkinter import ttk913914print(ttk.Style().lookup("TButton", "font"))915```916917#### `layout(style, layoutspec=None)`918919Определяет макет виджета для указанного стиля *style*. Если *layoutspec* опущен, возвращает спецификацию макета для указанного стиля.920921*layoutspec*, если указан, должен быть списком или другим типом последовательности (кроме строк), где каждый элемент должен быть кортежем, первый элемент – это имя макета, а второй элемент должен иметь формат, описанный в [Layouts](https://python-all.ru/3.1/library/tkinter.ttk.html#layouts).922923Чтобы понять формат, посмотрите следующий пример (он не предназначен для выполнения полезных действий):924925```python926from tkinter import ttk927import tkinter928929root = tkinter.Tk()930931style = ttk.Style()932style.layout("TMenubutton", [933   ("Menubutton.background", None),934   ("Menubutton.button", {"children":935       [("Menubutton.focus", {"children":936           [("Menubutton.padding", {"children":937               [("Menubutton.label", {"side": "left", "expand": 1})]938           })]939       })]940   }),941])942943mbtn = ttk.Menubutton(text='Text')944mbtn.pack()945root.mainloop()946```947948#### `element_create(elementname, etype, *args, **kw)`949950Создаёт новый элемент в текущей теме с заданным *etype*, который должен быть одним из «image», «from» или «vsapi». Последний доступен только в Tk 8.6a для Windows XP и Vista и здесь не описывается.951952Если используется «image», *args* должен содержать имя изображения по умолчанию, за которым следуют пары спецификация состояния/значение (это imagespec), а *kw* может иметь следующие параметры:953954> - **border=padding**955>956>   padding – это список из не более четырёх целых чисел, задающих левую, верхнюю, правую и нижнюю границы соответственно.957> - **height=height**958>959>   Задаёт минимальную высоту элемента. Если меньше нуля, по умолчанию используется высота базового изображения.960> - **padding=padding**961>962>   Задаёт внутренний отступ элемента. По умолчанию равен значению border, если не указан.963> - **sticky=spec**964>965>   Определяет расположение изображения внутри результирующей области. spec содержит ноль или более символов «n», «s», «w» или «e».966> - **width=width**967>968>   Задаёт минимальную ширину элемента. Если меньше нуля, по умолчанию используется ширина базового изображения.969970Если в качестве значения *etype* используется “from”, то [`element_create()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Style.element_create) клонирует существующий элемент. Параметр *args* должен содержать имя темы, из которой будет клонирован элемент, и, опционально, элемент для клонирования. Если этот элемент для клонирования не указан, будет использован пустой элемент. Параметр *kw* игнорируется.971972#### `element_names()`973974Возвращает список элементов, определённых в текущей теме.975976#### `element_options(elementname)`977978Возвращает список параметров979980*elementname*981982.983984#### `theme_create(themename, parent=None, settings=None)`985986Создаёт новую тему.987988Ошибка, если *themename* уже существует. Если указан *parent*, новая тема наследует стили, элементы и компоновку от родительской темы. Если присутствуют *settings*, они должны иметь тот же синтаксис, который используется для [`theme_settings()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Style.theme_settings).989990#### `theme_settings(themename, settings)`991992Временно устанавливает текущую тему на *themename*, применяет указанные *settings*, а затем восстанавливает предыдущую тему.993994Каждый ключ в *settings* является стилем, и каждое значение может содержать ключи ‘configure’, ‘map’, ‘layout’ и ‘element create’, и они должны иметь тот же формат, что указан методами [`Style.configure()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Style.configure), [`Style.map()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Style.map), [`Style.layout()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Style.layout) и [`Style.element_create()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Style.element_create) соответственно.995996В качестве примера немного изменим Combobox для темы по умолчанию:997998```python999from tkinter import ttk1000import tkinter10011002root = tkinter.Tk()10031004style = ttk.Style()1005style.theme_settings("default", {1006   "TCombobox": {1007       "configure": {"padding": 5},1008       "map": {1009           "background": [("active", "green2"),1010                          ("!disabled", "green4")],1011           "fieldbackground": [("!disabled", "green3")],1012           "foreground": [("focus", "OliveDrab1"),1013                          ("!disabled", "OliveDrab2")]1014       }1015   }1016})10171018combo = ttk.Combobox().pack()10191020root.mainloop()1021```10221023#### `theme_names()`10241025Возвращает список всех известных тем.10261027#### `theme_use(themename=None)`10281029Если10301031*themename*10321033не указан, возвращает текущую тему. В противном случае устанавливает текущую тему в10341035*themename*10361037, обновляет все виджеты и генерирует событие \<\<ThemeChanged\>\>.10381039### 24.2.10.1. Компоновки10401041Компоновка (layout) может быть просто None, если она не принимает параметров, или словарём параметров, определяющих, как расположить элемент. Механизм компоновки использует упрощённую версию менеджера геометрии pack: для заданной начальной области каждый элемент получает свой участок. Допустимые параметры/значения:10421043> - **side: какая сторона**1044>1045>   Указывает, с какой стороны области размещать элемент; одно из значений: top, right, bottom или left. Если не указано, элемент занимает всю область.1046> - **прикрепление: nswe**1047>1048>   Указывает, где размещается элемент внутри выделенной ему части.1049> - **unit: 0 или 1**1050>1051>   Если установлено в 1, заставляет элемент и всех его потомков рассматривать как единый элемент для целей [`Widget.identify()`](https://python-all.ru/3.1/library/tkinter.ttk.html#tkinter.ttk.Widget.identify) и т.д. Используется для таких вещей, как ползунки полосы прокрутки с захватами.1052> - **дочерние элементы: \[sublayout... \]**1053>1054>   Задаёт список элементов для размещения внутри элемента. Каждый элемент – это кортеж (или другой тип последовательности), где первый элемент – название компоновки, а второй – [Layout](https://python-all.ru/3.1/library/tkinter.ttk.html#layouts).1055