tkinter.ttk.md
1> **Источник:** https://python-all.ru/3.8/library/tkinter.ttk.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`tkinter.ttk`](https://python-all.ru/3.8/library/tkinter.ttk.html#module-tkinter.ttk) – темизированные виджеты Tk89**Исходный код:** [Lib/tkinter/ttk.py](https://python-all.ru/src/3.8/Lib/tkinter/ttk.py)1011---1213Модуль [`tkinter.ttk`](https://python-all.ru/3.8/library/tkinter.ttk.html#module-tkinter.ttk) предоставляет доступ к набору тематических виджетов Tk, появившихся в Tk 8.5. Если Python был скомпилирован без поддержки Tk 8.5, этот модуль всё равно доступен при установке *Tile*. Первый способ с использованием Tk 8.5 даёт дополнительные преимущества, включая сглаживание шрифтов в X11 и прозрачность окон (требует композитного оконного менеджера в X11).1415Основная идея [`tkinter.ttk`](https://python-all.ru/3.8/library/tkinter.ttk.html#module-tkinter.ttk) заключается в том, чтобы, насколько это возможно, разделять код, реализующий поведение виджета, и код, реализующий его внешний вид.1617> **См. также**18>19> **[Поддержка стилизации виджетов Tk](https://python-all.ru/3.8/library/tkinter.ttk.html)**20>21> Документ, представляющий поддержку тем для Tk2223## Использование Ttk2425Чтобы начать использовать Ttk, импортируйте его модуль:2627```python28from tkinter import ttk29```3031Чтобы переопределить базовые виджеты Tk, импорт должен следовать после импорта Tk:3233```python34from tkinter import *35from tkinter.ttk import *36```3738Этот код заставляет несколько виджетов [`tkinter.ttk`](https://python-all.ru/3.8/library/tkinter.ttk.html#module-tkinter.ttk) (`Button`, `Checkbutton`, `Entry`, `Frame`, `Label`, `LabelFrame`, `Menubutton`, `PanedWindow`, `Radiobutton`, `Scale` и `Scrollbar`) автоматически заменять виджеты Tk.3940Это даёт прямое преимущество в использовании новых виджетов, которые обеспечивают лучший внешний вид и ощущение на разных платформах; однако заменяющие виджеты не полностью совместимы. Основное отличие в том, что опции виджетов, такие как «fg», «bg» и другие, связанные со стилизацией, больше не присутствуют в виджетах Ttk. Вместо этого используйте класс `ttk.Style` для улучшенных эффектов стилизации.4142> **См. также**43>44> **[Конвертация существующих приложений для использования виджетов Tile](https://python-all.ru/3.8/library/tkinter.ttk.html)**45>46> Монография (с использованием терминологии Tcl) о различиях, обычно возникающих при переносе приложений на использование новых виджетов.4748## Виджеты Ttk4950Ttk поставляется с 18 виджетами, двенадцать из которых уже существовали в tkinter: `Button`, `Checkbutton`, `Entry`, `Frame`, `Label`, `LabelFrame`, `Menubutton`, `PanedWindow`, `Radiobutton`, `Scale`, `Scrollbar` и [`Spinbox`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Spinbox). Остальные шесть – новые: [`Combobox`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Combobox), [`Notebook`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Notebook), [`Progressbar`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Progressbar), `Separator`, `Sizegrip` и [`Treeview`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Treeview). И все они являются подклассами [`Widget`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Widget).5152Использование виджетов Ttk придаёт приложению улучшенный внешний вид и ощущение. Как обсуждалось выше, существуют различия в том, как кодируется стилизация.5354Код Tk:5556```python57l1 = tkinter.Label(text="Test", fg="black", bg="white")58l2 = tkinter.Label(text="Test", fg="black", bg="white")59```6061Код Ttk:6263```python64style = ttk.Style()65style.configure("BW.TLabel", foreground="black", background="white")6667l1 = ttk.Label(text="Test", style="BW.TLabel")68l2 = ttk.Label(text="Test", style="BW.TLabel")69```7071Для получения дополнительной информации о [TtkStyling](https://python-all.ru/3.8/library/tkinter.ttk.html#ttkstyling) см. документацию класса [`Style`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Style).7273## Виджет7475`ttk.Widget` определяет стандартные опции и методы, поддерживаемые тематическими виджетами Tk и не предназначен для прямого создания экземпляров.7677### Стандартные опции7879Все виджеты `ttk` принимают следующие опции:8081> | Параметр | Описание |82> | --- | --- |83> | класс | Задаёт класс окна. Этот класс используется при запросе базы параметров для получения других параметров окна, для определения тегов привязки (bindtags) по умолчанию и для выбора стандартного расположения и стиля виджета. Этот параметр доступен только для чтения и может быть задан только при создании окна. |84> | курсор | Задает курсор мыши, используемый для виджета. Если установлено в пустую строку (по умолчанию), курсор наследуется от родительского виджета. |85> | takefocus | Определяет, принимает ли окно фокус при навигации с клавиатуры. Возвращается 0, 1 или пустая строка. Если возвращается 0, это означает, что окно должно быть полностью пропущено при навигации. Если 1 – окно должно получать фокус ввода, пока оно видимо. Пустая строка означает, что скрипты навигации сами решают, ставить ли фокус на это окно. |86> | стиль | Может использоваться для указания пользовательского стиля виджета. |8788### Опции прокручиваемого виджета8990Следующие параметры поддерживаются виджетами, управляемыми полосой прокрутки.9192> | Параметр | Описание |93> | --- | --- |94> | xscrollcommand | Используется для взаимодействия с горизонтальными полосами прокрутки. Когда представление в окне виджета изменяется, виджет генерирует команду Tcl на основе scrollcommand. Обычно эта опция состоит из метода `Scrollbar.set()` некоторой полосы прокрутки. Это приведет к обновлению полосы прокрутки при каждом изменении представления в окне. |95> | yscrollcommand | Используется для взаимодействия с вертикальными полосами прокрутки. Дополнительные сведения см. выше. |9697### Опции метки9899Следующие параметры поддерживаются метками, кнопками и другими виджетами, похожими на кнопки.100101> | Параметр | Описание |102> | --- | --- |103> | текст | Задаёт текстовую строку для отображения внутри виджета. |104> | textvariable | Задаёт имя, значение которого будет использоваться вместо ресурса параметра text. |105> | подчёркивание | Если задан, указывает индекс (начиная с 0) символа для подчёркивания в текстовой строке. Подчёркнутый символ используется для мнемонической активации. |106> | изображение | Задаёт изображение для отображения. Это список из одного или более элементов. Первый элемент – имя изображения по умолчанию. Остальная часть списка – последовательность пар состояние/значение, как определено в [`Style.map()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Style.map), указывающая разные изображения для использования, когда виджет находится в определённом состоянии или комбинации состояний. Все изображения в списке должны быть одного размера. |107> | составной | Определяет способ отображения изображения относительно текста, когда присутствуют оба параметра text и image. Допустимые значения: text: отображать только текст image: отображать только изображение top, bottom, left, right: отображать изображение соответственно над текстом, под текстом, слева от текста или справа от текста. none: по умолчанию. Отображать изображение, если оно есть, в противном случае – текст. |108> | ширина | Если больше нуля, указывает, сколько места в ширину символа выделить для текстовой метки. Если меньше нуля – задаёт минимальную ширину. Если ноль или не указано, используется естественная ширина текстовой метки. |109110### Опции совместимости111112> | Параметр | Описание |113> | --- | --- |114> | состояние | Может быть установлено в «normal» или «disabled» для управления битом состояния «disabled». Это опция только для записи: её установка изменяет состояние виджета, но метод [`Widget.state()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Widget.state) не влияет на эту опцию. |115116### Состояния виджета117118Состояние виджета – это битовая маска независимых флагов состояния.119120> | Флаг | Описание |121> | --- | --- |122> | активно | Курсор мыши находится над виджетом, и нажатие кнопки мыши вызовет некоторое действие. |123> | отключено | Виджет отключен программно. |124> | фокус | Виджет имеет фокус ввода с клавиатуры. |125> | нажато | Виджет находится в нажатом состоянии. |126> | выбрано | «Вкл», «истина» или «текущий» для таких элементов, как Checkbutton и Radiobutton. |127> | фон | В Windows и Mac есть понятие «активного» окна или окна переднего плана. Состояние *background* устанавливается для виджетов в фоновом окне и сбрасывается для виджетов в окне переднего плана. |128> | только для чтения | Виджет не должен допускать изменения пользователем. |129> | альтернативное | Альтернативный формат отображения, специфичный для виджета. |130> | недопустимое | Значение виджета недопустимо. |131132Спецификация состояния – это последовательность имён состояний, опционально с префиксом в виде восклицательного знака, указывающим, что бит сброшен.133134### ttk.Widget135136Помимо методов, описанных ниже, `ttk.Widget` поддерживает методы `tkinter.Widget.cget()` и `tkinter.Widget.configure()`.137138#### `class tkinter.ttk.Widget`139140#### `identify(x, y)`141142Возвращает имя элемента в позиции *x* *y* или пустую строку, если точка не находится ни в одном элементе.143144*x* и *y* – это координаты в пикселях относительно виджета.145146#### `instate(statespec, callback=None, *args, **kw)`147148Проверяет состояние виджета. Если колбэк не указан, возвращает `True`, если состояние виджета соответствует *statespec*, и `False` в противном случае. Если колбэк указан, то он вызывается с args, если состояние виджета соответствует *statespec*.149150#### `state(statespec=None)`151152Изменяет или запрашивает состояние виджета. Если *statespec* указан, устанавливает состояние виджета в соответствии с ним и возвращает новый *statespec*, указывающий, какие флаги были изменены. Если *statespec* не указан, возвращает текущие включенные флаги состояния.153154*statespec* обычно является списком или кортежем.155156## Combobox157158Виджет `ttk.Combobox` объединяет текстовое поле с выпадающим списком значений. Этот виджет является подклассом `Entry`.159160Помимо методов, унаследованных от [`Widget`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Widget): `Widget.cget()`, `Widget.configure()`, [`Widget.identify()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Widget.identify), [`Widget.instate()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Widget.instate) и [`Widget.state()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Widget.state), а также следующих, унаследованных от `Entry`: `Entry.bbox()`, `Entry.delete()`, `Entry.icursor()`, `Entry.index()`, `Entry.insert()`, `Entry.selection()`, `Entry.xview()`, он имеет некоторые другие методы, описанные в `ttk.Combobox`.161162### Параметры163164Этот виджет принимает следующие специфические параметры:165166> | Параметр | Описание |167> | --- | --- |168> | exportselection | Булево значение. Если установлено, выделение виджета связывается с выделением оконного менеджера (которое может быть получено вызовом Misc.selection\_get, например). |169> | выравнивание | Определяет выравнивание текста внутри виджета. Одно из значений: “left”, “center” или “right”. |170> | рост | Определяет высоту выпадающего списка в строках. |171> | postcommand | Скрипт (возможно, зарегистрированный с помощью Misc.register), который вызывается непосредственно перед отображением значений. Он может определять, какие значения отображать. |172> | состояние | Одно из значений: "normal", "readonly" или "disabled". В состоянии "readonly" значение не может быть отредактировано напрямую, и пользователь может только выбирать значения из выпадающего списка. В состоянии "normal" текстовое поле доступно для редактирования. В состоянии "disabled" взаимодействие невозможно. |173> | textvariable | Определяет имя, значение которого связано со значением виджета. Всякий раз, когда значение, ассоциированное с этим именем, изменяется, значение виджета обновляется, и наоборот. См. `tkinter.StringVar`. |174> | значения | Определяет список значений для отображения в выпадающем списке. |175> | ширина | Определяет целое число, указывающее желаемую ширину окна ввода, в символах среднего размера шрифта виджета. |176177### Виртуальные события178179Виджет комбобокс генерирует виртуальное событие **\<\<ComboboxSelected\>\>**, когда пользователь выбирает элемент из списка значений.180181### ttk.Combobox182183#### `class tkinter.ttk.Combobox`184185#### `current(newindex=None)`186187Если указан *newindex*, устанавливает значение комбобокса на элемент с позицией *newindex*. В противном случае возвращает индекс текущего значения или -1, если текущее значение отсутствует в списке значений.188189#### `get()`190191Возвращает текущее значение комбобокса.192193#### `set(value)`194195Устанавливает значение комбобокса в *value*.196197## Spinbox198199Виджет `ttk.Spinbox` представляет собой `ttk.Entry`, дополненный кнопками увеличения и уменьшения. Он может использоваться для чисел или списков строковых значений. Этот виджет является подклассом `Entry`.200201Помимо методов, унаследованных от [`Widget`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Widget): `Widget.cget()`, `Widget.configure()`, [`Widget.identify()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Widget.identify), [`Widget.instate()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Widget.instate) и [`Widget.state()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Widget.state), а также следующих, унаследованных от `Entry`: `Entry.bbox()`, `Entry.delete()`, `Entry.icursor()`, `Entry.index()`, `Entry.insert()`, `Entry.xview()`, он имеет некоторые другие методы, описанные в `ttk.Spinbox`.202203### Параметры204205Этот виджет принимает следующие специфические параметры:206207>208209| Параметр | Описание |210| --- | --- |211| from | Вещественное значение. Если задано, это минимальное значение, до которого кнопка уменьшения будет уменьшать. Должно быть указано как `from_` при использовании в качестве аргумента, так как `from` является ключевым словом Python. |212| на | Вещественное значение. Если задано, это максимальное значение, до которого кнопка увеличения будет увеличивать. |213| increment | Вещественное значение. Задает величину, на которую кнопки увеличения/уменьшения изменяют значение. По умолчанию 1.0. |214| значения | Последовательность строковых или вещественных значений. Если задана, кнопки увеличения/уменьшения будут перебирать элементы этой последовательности, а не увеличивать или уменьшать числа. |215| перенос | Логическое значение. Если `True`, кнопки увеличения и уменьшения будут циклически переходить от значения `to` к значению `from` или от значения `from` к значению `to` соответственно. |216| формат | Строковое значение. Задает формат чисел, устанавливаемых кнопками увеличения/уменьшения. Он должен быть в форме “%W.Pf”, где W – ширина заполнения значения, P – точность, а ‘%’ и ‘f’ являются литералами. |217| command | Вызываемый объект Python. Будет вызван без аргументов при каждом нажатии кнопки увеличения или уменьшения. |218219### Виртуальные события220221Виджет spinbox генерирует виртуальное событие **\<\<Increment\>\>**, когда пользователь нажимает \<Up\>, и виртуальное событие **\<\<Decrement\>\>**, когда пользователь нажимает \<Down\>.222223### ttk.Spinbox224225#### `class tkinter.ttk.Spinbox`226227#### `get()`228229Возвращает текущее значение спинбокса.230231#### `set(value)`232233Устанавливает значение спинбокса в *value*.234235## Notebook236237Виджет Ttk Notebook управляет набором окон и показывает по одному за раз. Каждое дочернее окно связано с вкладкой; пользователь может выбрать вкладку, чтобы изменить отображаемое окно.238239### Параметры240241Этот виджет принимает следующие специфические параметры:242243> | Параметр | Описание |244> | --- | --- |245> | рост | Если присутствует и больше нуля, задает желаемую высоту области панели (не включая внутренние отступы или вкладки). В противном случае используется максимальная высота всех панелей. |246> | отступы | Задает величину дополнительного пространства, добавляемого вокруг блокнота. Отступы представляют собой список из не более чем четырех спецификаций длины: слева, сверху, справа, снизу. Если указано менее четырех элементов, значение снизу по умолчанию равно верхнему, справа – левому, а верхнее – левому. |247> | ширина | Если присутствует и больше нуля, задаёт желаемую ширину области панели (без учёта внутреннего отступа). В противном случае используется максимальная ширина всех панелей. |248249### Параметры вкладки250251Также существуют специальные параметры для вкладок:252253> | Параметр | Описание |254> | --- | --- |255> | состояние | Может быть «normal», «disabled» или «hidden». Если «disabled», то вкладка не выбирается. Если «hidden», то вкладка не отображается. |256> | привязка | Определяет, как дочернее окно позиционируется внутри области панели. Значение – строка, содержащая ноль или более символов «n», «s», «e» или «w». Каждая буква обозначает сторону (север, юг, восток или запад), к которой будет прикреплено дочернее окно, в соответствии с менеджером геометрии `grid()`. |257> | отступы | Задаёт величину дополнительного пространства между блокнотом и данной панелью. Синтаксис такой же, как для параметра padding, используемого этим виджетом. |258> | текст | Задаёт текст, отображаемый на вкладке. |259> | изображение | Задаёт изображение для отображения на вкладке. Смотрите параметр image, описанный в [`Widget`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Widget). |260> | составной | Определяет, как отображать изображение относительно текста, если присутствуют оба параметра text и image. Допустимые значения см. в [Параметры метки](https://python-all.ru/3.8/library/tkinter.ttk.html#label-options). |261> | подчёркивание | Задаёт индекс (начиная с 0) символа для подчеркивания в текстовой строке. Подчёркнутый символ используется для мнемонической активации, если вызывается [`Notebook.enable_traversal()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Notebook.enable_traversal). |262263### Идентификаторы вкладок264265Параметр tab\_id, присутствующий в нескольких методах `ttk.Notebook`, может принимать любую из следующих форм:266267- Целое число от нуля до количества вкладок268- Имя дочернего окна269- Позиционное указание вида «@x,y», идентифицирующее вкладку270- Литеральная строка «current», которая идентифицирует текущую выбранную вкладку271- Строковый литерал «end», возвращающий количество вкладок (действителен только для [`Notebook.index()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Notebook.index))272273### Виртуальные события274275Этот виджет генерирует виртуальное событие **\<\<NotebookTabChanged\>\>** после выбора новой вкладки.276277### ttk.Notebook278279#### `class tkinter.ttk.Notebook`280281#### `add(child, **kw)`282283Добавляет новую вкладку в блокнот.284285Если окно в данный момент управляется блокнотом, но скрыто, оно восстанавливается на свою предыдущую позицию.286287Список доступных опций см. в [Tab Options](https://python-all.ru/3.8/library/tkinter.ttk.html#tab-options).288289#### `forget(tab_id)`290291Удаляет вкладку, указанную *tab\_id*, снимает с отображения и управления связанное окно.292293#### `hide(tab_id)`294295Скрывает вкладку, указанную *tab\_id*.296297Вкладка не будет отображаться, но связанное окно остаётся под управлением блокнота, а его конфигурация запоминается. Скрытые вкладки можно восстановить командой [`add()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Notebook.add).298299#### `identify(x, y)`300301Возвращает имя элемента вкладки в позиции *x*, *y* или пустую строку, если элемент отсутствует.302303#### `index(tab_id)`304305Возвращает числовой индекс вкладки, указанной *tab\_id*, или общее количество вкладок, если *tab\_id* равно строке «end».306307#### `insert(pos, child, **kw)`308309Вставляет панель в указанную позицию.310311*pos* может быть строкой «end», целочисленным индексом или именем дочернего элемента, находящегося под управлением. Если *child* уже управляется блокнотом, он перемещается в указанную позицию.312313Список доступных опций см. в [Tab Options](https://python-all.ru/3.8/library/tkinter.ttk.html#tab-options).314315#### `select(tab_id=None)`316317Выбирает указанную *tab\_id*.318319Будет отображено связанное дочернее окно, а ранее выбранное окно (если оно отличается) будет скрыто. Если *tab\_id* не указан, возвращается имя виджета текущей выбранной панели.320321#### `tab(tab_id, option=None, **kw)`322323Запрашивает или изменяет параметры указанной *tab\_id*.324325Если *kw* не указан, возвращает словарь значений опций вкладки. Если указан *option*, возвращает значение этой *option*. В противном случае устанавливает опции в соответствующие значения.326327#### `tabs()`328329Возвращает список окон, управляемых Notebook.330331#### `enable_traversal()`332333Включает навигацию с клавиатуры для окна верхнего уровня, содержащего этот блокнот.334335Это расширяет привязки для окна верхнего уровня, содержащего блокнот, следующим образом:336337- `Control-Tab`: выбирает вкладку, следующую за текущей выбранной.338- `Shift-Control-Tab`: выбирает вкладку, предшествующую текущей выбранной.339- `Alt-K`: где *K* – мнемонический (подчеркнутый) символ любой вкладки, выбирает эту вкладку.340341Несколько виджетов Notebook в одном окне верхнего уровня могут быть включены для навигации,\\nвключая вложенные Notebook. Однако навигация по Notebook работает\\nкорректно, только если все панели имеют тот Notebook, в котором они находятся, в качестве родительского виджета.342343## Progressbar344345Виджет `ttk.Progressbar` отображает состояние длительной операции.\\nОн может работать в двух режимах: 1) детерминированный режим, показывающий\\nобъем выполненной работы относительно общего объема работы, и 2)\\nиндетерминированный режим, который предоставляет анимированное отображение, чтобы пользователь знал, что работа выполняется.346347### Параметры348349Этот виджет принимает следующие специфические параметры:350351> | Параметр | Описание |352> | --- | --- |353> | ориентация | Одно из «horizontal» или «vertical». Указывает ориентацию индикатора выполнения. |354> | длина | Указывает длину длинной оси индикатора выполнения (ширину, если горизонтальный, и высоту, если вертикальный). |355> | Режим | Одно из «determinate» или «indeterminate». |356> | максимум | Число, задающее максимальное значение. По умолчанию равно 100. |357> | значение | Текущее значение индикатора выполнения. В режиме «determinate» представляет объём выполненной работы. В режиме «indeterminate» интерпретируется как по модулю *maximum*; то есть индикатор выполнения завершает один «цикл», когда его значение увеличивается на *maximum*. |358> | переменная | Имя, связанное со значением опции. Если задано, значение индикатора выполнения автоматически устанавливается равным значению этого имени при каждом его изменении. |359> | фаза | Опция только для чтения. Виджет периодически увеличивает значение этой опции, когда его значение больше 0 и, в режиме «determinate», меньше maximum. Эта опция может использоваться текущей темой для дополнительных анимационных эффектов. |360361### ttk.Progressbar362363#### `class tkinter.ttk.Progressbar`364365#### `start(interval=None)`366367Начинает режим автоинкремента: планирует повторяющееся событие таймера, которое вызывает [`Progressbar.step()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Progressbar.step) каждые *interval* миллисекунд. Если не указано, *interval* по умолчанию равен 50 миллисекундам.368369#### `step(amount=None)`370371Увеличивает значение индикатора выполнения на *amount*.372373*amount* по умолчанию равен 1.0, если не указан.374375#### `stop()`376377Останавливает режим автоинкремента: отменяет любые повторяющиеся события таймера, запущенные [`Progressbar.start()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Progressbar.start) для данного индикатора выполнения.378379## Separator380381Виджет `ttk.Separator` отображает горизонтальную или вертикальную разделительную\\nлинию.382383Он не имеет других методов, кроме унаследованных от `ttk.Widget`.384385### Параметры386387Этот виджет принимает следующую специфическую опцию:388389> | Параметр | Описание |390> | --- | --- |391> | ориентация | Одно из «horizontal» или «vertical». Указывает ориентацию разделителя. |392393## Sizegrip394395Виджет `ttk.Sizegrip` (также известный как маркер изменения размера) позволяет пользователю\\nизменять размер содержащего окна верхнего уровня, нажимая и перетаскивая маркер.396397Этот виджет не имеет ни специфических опций, ни специфических методов, кроме унаследованных от `ttk.Widget`.398399### Примечания для конкретных платформ400401- На MacOS X окна верхнего уровня по умолчанию автоматически содержат встроенный размерный захват. Добавление `Sizegrip` безвредно, так как встроенный захват просто перекроет виджет.402403### Ошибки404405- Если положение содержащего окна верхнего уровня было задано относительно правого\\nили нижнего края экрана (например, ….), виджет `Sizegrip` не будет\\nизменять размер окна.406- Этот виджет поддерживает только изменение размера в направлении «southeast».407408## Treeview409410Виджет `ttk.Treeview` отображает иерархическую коллекцию элементов.\\nКаждый элемент имеет текстовую метку, необязательное изображение и необязательный список значений\\nданных. Значения данных отображаются в последовательных столбцах после метки\\nдерева.411412Порядок отображения значений данных можно контролировать, установив опцию виджета `displaycolumns`. Древовидный виджет также может отображать заголовки столбцов. Доступ к столбцам можно получить по номерам или символьным именам, перечисленным в опции columns виджета. См. [Идентификаторы столбцов](https://python-all.ru/3.8/library/tkinter.ttk.html#column-identifiers).413414Каждый элемент идентифицируется уникальным именем. Виджет сгенерирует ID элементов, если они не предоставлены вызывающей стороной. Существует выделенный корневой элемент, с именем `{}`. Сам корневой элемент не отображается; его дочерние элементы появляются на верхнем уровне иерархии.415416Каждый элемент также имеет список тегов, которые можно использовать для связывания событий с отдельными элементами и управления внешним видом элемента.417418Виджет Treeview поддерживает горизонтальную и вертикальную прокрутку в соответствии с опциями, описанными в [Параметры прокручиваемых виджетов](https://python-all.ru/3.8/library/tkinter.ttk.html#scrollable-widget-options), и методами [`Treeview.xview()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Treeview.xview) и [`Treeview.yview()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Treeview.yview).419420### Параметры421422Этот виджет принимает следующие специфические параметры:423424> | Параметр | Описание |425> | --- | --- |426> | столбцы | Список идентификаторов столбцов, определяющий количество столбцов и их имена. |427> | отображаемые столбцы | Список идентификаторов столбцов (символьных или целочисленных индексов), определяющий, какие столбцы данных отображаются и в каком порядке они появляются, или строка «#all». |428> | рост | Определяет количество строк, которые должны быть видны. Примечание: запрошенная ширина определяется суммой ширин столбцов. |429> | отступы | Определяет внутренний отступ виджета. Отступ – это список из не более чем четырёх спецификаций длины. |430> | режим выбора | Управляет тем, как встроенные привязки класса управляют выделением. Одно из значений: «extended», «browse» или «none». Если установлено «extended» (по умолчанию), можно выбрать несколько элементов. Если «browse», единовременно выбирается только один элемент. Если «none», выделение не будет изменяться. Обратите внимание, что код приложения и привязки тегов могут установить выделение по своему усмотрению, независимо от значения этой опции. |431> | отображение | Список, содержащий ноль или более следующих значений, определяющий, какие элементы дерева отображать. tree: отображать метки дерева в столбце #0. headings: отображать строку заголовков. По умолчанию отображаются «tree headings», т.е. показываются все элементы. **Примечание**: столбец #0 всегда относится к столбцу дерева, даже если show=«tree» не указано. |432433### Параметры элемента434435Следующие опции элементов могут быть указаны для элементов в командах виджета insert и item.436437> | Параметр | Описание |438> | --- | --- |439> | текст | Текстовая метка, отображаемая для элемента. |440> | изображение | Изображение Tk, отображаемое слева от метки. |441> | значения | Список значений, связанных с элементом. Каждый элемент должен содержать столько же значений, сколько столбцов в опции columns виджета. Если значений меньше, чем столбцов, оставшиеся значения считаются пустыми. Если значений больше, чем столбцов, лишние значения игнорируются. |442> | открыт | `True`/`False` значение, указывающее, должны ли дочерние элементы отображаться или быть скрыты. |443> | теги | Список тегов, связанных с этим элементом. |444445### Параметры тега446447Для тегов могут быть указаны следующие опции:448449> | Параметр | Описание |450> | --- | --- |451> | передний план | Определяет цвет текста. |452> | фон | Определяет цвет фона ячейки или элемента. |453> | шрифт | Определяет шрифт, используемый при отрисовке текста. |454> | изображение | Определяет изображение элемента, если опция image элемента пуста. |455456### Идентификаторы столбцов457458Идентификаторы столбцов могут принимать одну из следующих форм:459460- Символическое имя из списка опции columns.461- Целое число n, указывающее n-й столбец данных.462- Строка вида #n, где n – целое число, указывающая n-й столбец отображения.463464Примечания:465466- Значения опций элемента могут отображаться в порядке, отличном от порядка, в котором они хранятся.467- Столбец #0 всегда ссылается на столбец дерева, даже если show="tree" не указан.468469Номер столбца данных – это индекс в списке значений опций элемента; номер столбца отображения – это номер столбца в дереве, где отображаются значения. Метки дерева отображаются в столбце #0. Если опция displaycolumns не задана, то столбец данных n отображается в столбце #n+1. И снова, **столбец #0 всегда ссылается на столбец дерева**.470471### Виртуальные события472473Виджет Treeview генерирует следующие виртуальные события.474475> | Событие | Описание |476> | --- | --- |477> | \<\<TreeviewSelect\>\> | Генерируется при каждом изменении выделения. |478> | \<\<TreeviewOpen\>\> | Генерируется непосредственно перед установкой элемента фокуса в open=True. |479> | \<\<TreeviewClose\>\> | Генерируется сразу после установки элемента фокуса в open=False. |480481Методы [`Treeview.focus()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Treeview.focus) и [`Treeview.selection()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Treeview.selection) можно использовать для определения затронутого элемента или элементов.482483### ttk.Treeview484485#### `class tkinter.ttk.Treeview`486487#### `bbox(item, column=None)`488489Возвращает ограничивающую рамку (относительно окна виджета treeview) указанного *элемента* в формате (x, y, width, height).490491Если указан *столбец*, возвращается ограничивающая рамка этой ячейки. Если *элемент* не виден (т.е. является потомком закрытого элемента или находится за пределами экрана при прокрутке), возвращается пустая строка.492493#### `get_children(item=None)`494495Возвращает список дочерних элементов, принадлежащих *элементу*.496497Если *элемент* не указан, возвращает корневые дочерние элементы.498499#### `set_children(item, *newchildren)`500501Заменяет потомка *элемента* на *новые дочерние элементы*.502503Дочерние элементы, присутствующие в *элементе*, но отсутствующие в *newchildren*, отсоединяются от дерева. Ни один элемент в *newchildren* не может быть предком *элемента*. Обратите внимание, что если не указать *newchildren*, это приведёт к отсоединению дочерних элементов *элемента*.504505#### `column(column, option=None, **kw)`506507Запрашивает или изменяет параметры для указанного *столбца*.508509Если *kw* не передан, возвращает словарь значений параметров столбца. Если указан *параметр*, возвращается значение этого *параметра*. В противном случае устанавливает параметры в соответствующие значения.510511Допустимые параметры/значения:512513- **идентификатор**514515 Возвращает имя столбца. Это параметр только для чтения.516- **anchor: одно из стандартных значений привязки Tk.**517518 Определяет, как должен быть выровнен текст в этом столбце относительно ячейки.519- **minwidth: ширина**520521 Минимальная ширина столбца в пикселях. Виджет treeview не сделает столбец уже, чем указано этим параметром, при изменении размера виджета или перетаскивании столбца пользователем.522- **растяжение: `True`/`False`**523524 Определяет, должна ли ширина столбца изменяться при изменении размера виджета.525- **width: ширина**526527 Ширина столбца в пикселях.528529Чтобы настроить столбец дерева, вызовите этот метод с column = “#0”.530531#### `delete(*items)`532533Удаляет все указанные *items* и всех их потомков.534535Корневой элемент не может быть удалён.536537#### `detach(*items)`538539Открепляет все указанные *items* от дерева.540541Элементы и все их потомки по-прежнему существуют и могут быть повторно вставлены в другое место дерева, но не будут отображаться.542543Корневой элемент не может быть откреплён.544545#### `exists(item)`546547Возвращает `True`, если указанный *элемент* присутствует в дереве.548549#### `focus(item=None)`550551Если указан *item*, устанавливает элемент фокуса на *item*. В противном случае возвращает текущий элемент фокуса или '' (пустую строку), если его нет.552553#### `heading(column, option=None, **kw)`554555Запрашивает или изменяет параметры заголовка для указанного *column*.556557Если *kw* не указан, возвращает словарь значений параметров заголовка. Если указан *option*, возвращается значение для этого *option*. В противном случае устанавливает параметры в соответствующие значения.558559Допустимые параметры/значения:560561- **text: текст**562563 Текст, отображаемый в заголовке столбца.564- **изображение: imageName**565566 Указывает изображение, отображаемое справа от заголовка столбца.567- **привязка: anchor**568569 Указывает, как должен быть выровнен текст заголовка. Одно из стандартных значений привязки Tk.570- **command: колбэк**571572 Колбэк, вызываемый при нажатии на метку заголовка.573574Для настройки заголовка столбца дерева вызовите этот метод с column = "#0".575576#### `identify(component, x, y)`577578Возвращает описание указанного *component* в точке, заданной *x* и *y*, или пустую строку, если такой *component* отсутствует в этой позиции.579580#### `identify_row(y)`581582Возвращает идентификатор элемента в позиции *y*.583584#### `identify_column(x)`585586Возвращает идентификатор столбца данных ячейки в позиции *x*.587588Столбец дерева имеет ID #0.589590#### `identify_region(x, y)`591592Возвращает одно из:593594| регион | значение |595| --- | --- |596| заголовок | Область заголовка дерева. |597| разделитель | Промежуток между заголовками двух столбцов. |598| дерево | Область дерева. |599| ячейка | Ячейка данных. |600601Доступность: Tk 8.6.602603#### `identify_element(x, y)`604605Возвращает элемент в позиции *x*, *y*.606607Доступность: Tk 8.6.608609#### `index(item)`610611Возвращает целочисленный индекс *item* в списке дочерних элементов его родителя.612613#### `insert(parent, index, iid=None, **kw)`614615Создаёт новый элемент и возвращает идентификатор созданного элемента.616617*parent* – это идентификатор родительского элемента или пустая строка для создания нового элемента верхнего уровня. *index* – целое число или значение «end», указывающее, куда в списке дочерних элементов родителя вставить новый элемент. Если *index* меньше или равен нулю, новый узел вставляется в начало; если *index* больше или равен текущему количеству дочерних элементов, он вставляется в конец. Если указан *iid*, он используется в качестве идентификатора элемента; *iid* не должен уже существовать в дереве. В противном случае создаётся новый уникальный идентификатор.618619Смотрите [Параметры элементов](https://python-all.ru/3.8/library/tkinter.ttk.html#item-options) для списка доступных параметров.620621#### `item(item, option=None, **kw)`622623Запрашивает или изменяет параметры указанного *item*.624625Если параметры не заданы, возвращается словарь с парами параметр/значение для элемента. Если указан *option*, возвращается значение этого параметра. В противном случае устанавливает параметры в соответствии со значениями, переданными в *kw*.626627#### `move(item, parent, index)`628629Перемещает *item* на позицию *index* в список дочерних элементов *parent*.630631Перемещать элемент под один из его потомков запрещено. Если *index* меньше или равен нулю, *item* перемещается в начало; если больше или равен количеству дочерних элементов, перемещается в конец. Если *item* был отсоединён, он повторно присоединяется.632633#### `next(item)`634635Возвращает идентификатор следующего соседнего элемента *item* или пустую строку, если *item* является последним дочерним элементом своего родителя.636637#### `parent(item)`638639Возвращает идентификатор родителя *элемента* или пустую строку, если *элемент* находится на верхнем уровне иерархии.640641#### `prev(item)`642643Возвращает идентификатор *предыдущего братского элемента* или пустую строку, если *элемент* является первым потомком своего родителя.644645#### `reattach(item, parent, index)`646647Псевдоним для [`Treeview.move()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Treeview.move).648649#### `see(item)`650651Обеспечивает видимость *элемента*.652653Устанавливает для всех предков *элемента* опцию открытия в `True` и при необходимости прокручивает виджет, чтобы *элемент* оказался в видимой части дерева.654655#### `selection()`656657Возвращает кортеж выделенных элементов.658659Изменено в версии 3.8: `selection()` больше не принимает аргументов. Для изменения состояния выделения используйте следующие методы выделения.660661#### `selection_set(*items)`662663*Элементы* становятся новым выделением.664665Изменено в версии 3.6: *items* можно передавать отдельными аргументами, а не только одним кортежем.666667#### `selection_add(*items)`668669Добавляет *элементы* в выделение.670671Изменено в версии 3.6: *items* можно передавать отдельными аргументами, а не только одним кортежем.672673#### `selection_remove(*items)`674675Удаляет *элементы* из выделения.676677Изменено в версии 3.6: *items* можно передавать отдельными аргументами, а не только одним кортежем.678679#### `selection_toggle(*items)`680681Переключает состояние выделения каждого элемента из *items*.682683Изменено в версии 3.6: *items* можно передавать отдельными аргументами, а не только одним кортежем.684685#### `set(item, column=None, value=None)`686687С одним аргументом возвращает словарь пар столбец/значение для указанного *элемента*. С двумя аргументами возвращает текущее значение указанного *столбца*. С тремя аргументами устанавливает значение заданного *столбца* в заданном *элементе* равным указанному *значению*.688689#### `tag_bind(tagname, sequence=None, callback=None)`690691Привязывает колбэк к заданному событию *sequence* для тега *tagname*. Когда событие доставляется элементу, вызываются колбэки для каждого из тегов этого элемента.692693#### `tag_configure(tagname, option=None, **kw)`694695Запрашивает или изменяет параметры для указанного *tagname*.696697Если *kw* не указан, возвращает словарь настроек параметров для *tagname*. Если указан *option*, возвращает значение этого *параметра* для указанного *tagname*. В противном случае устанавливает параметры в соответствующие значения для заданного *tagname*.698699#### `tag_has(tagname, item=None)`700701Если указан *элемент*, возвращает 1 или 0 в зависимости от того, имеет ли указанный *элемент* заданное *имя тега*. В противном случае возвращает список всех элементов, имеющих указанный тег.702703Доступность: Tk 8.6704705#### `xview(*args)`706707Запрашивает или изменяет горизонтальное положение treeview.708709#### `yview(*args)`710711Запрашивает или изменяет вертикальное положение treeview.712713## Стилизация Ttk714715Каждому виджету в `ttk` назначается стиль, который определяет набор элементов, составляющих виджет, и то, как они расположены, а также динамические и стандартные настройки для параметров элементов. По умолчанию имя стиля – это то же, что и имя класса виджета, но его можно переопределить с помощью опции style виджета. Если имя класса виджета неизвестно, используйте метод `Misc.winfo_class()` (somewidget.winfo\_class()).716717> **См. также**718>719> **[Доклад на конференции Tcl’2004](https://python-all.ru/3.8/library/tkinter.ttk.html)**720>721> В этом документе объясняется, как работает механизм тем.722723#### `class tkinter.ttk.Style`724725Этот класс используется для управления базой данных стилей.726727#### `configure(style, query_opt=None, **kw)`728729Запрашивает или устанавливает значение по умолчанию для указанных параметров в *style*.730731Каждый ключ в *kw* является параметром, а каждое значение – строкой, определяющей значение этого параметра.732733Например, чтобы изменить все кнопки по умолчанию на плоские с отступами и другим цветом фона:734735```python736from tkinter import ttk737import tkinter738739root = tkinter.Tk()740741ttk.Style().configure("TButton", padding=6, relief="flat",742 background="#ccc")743744btn = ttk.Button(text="Sample")745btn.pack()746747root.mainloop()748```749750#### `map(style, query_opt=None, **kw)`751752Запрашивает или устанавливает динамические значения указанных параметров в *style*.753754Каждый ключ в *kw* является параметром, а каждое значение должно быть списком или кортежем (обычно), содержащим спецификации состояний (statespecs), сгруппированные в кортежи, списки или как-то иначе. Спецификация состояний – это комбинация одного или нескольких состояний, за которыми следует значение.755756Пример может прояснить это.757758```python759import tkinter760from tkinter import ttk761762root = tkinter.Tk()763764style = ttk.Style()765style.map("C.TButton",766 foreground=[('pressed', 'red'), ('active', 'blue')],767 background=[('pressed', '!disabled', 'black'), ('active', 'white')]768 )769770colored_btn = ttk.Button(text="Test", style="C.TButton").pack()771772root.mainloop()773```774775Обратите внимание, что порядок последовательностей (состояния, значение) для параметра важен. Если, например, в параметре foreground изменить порядок на `[('active', 'blue'), ('pressed', 'red')]`, то результатом будет синий цвет текста, когда виджет находится в активном или нажатом состоянии.776777#### `lookup(style, option, state=None, default=None)`778779Возвращает значение, указанное для параметра *option* в стиле *style*.780781Если указан параметр *state*, он должен быть последовательностью из одного или нескольких состояний. Если задан аргумент *default*, он используется как запасное значение, если спецификация для параметра не найдена.782783Чтобы проверить, какой шрифт использует Button по умолчанию:784785```python786from tkinter import ttk787788print(ttk.Style().lookup("TButton", "font"))789```790791#### `layout(style, layoutspec=None)`792793Определяет макет виджета для указанного стиля *style*. Если *layoutspec* опущен, возвращает спецификацию макета для указанного стиля.794795*layoutspec*, если указан, должен быть списком или другим типом последовательности (исключая строки), где каждый элемент должен быть кортежем, первый элемент – имя макета, а второй элемент должен иметь формат, описанный в разделе [Layouts](https://python-all.ru/3.8/library/tkinter.ttk.html#layouts).796797Чтобы понять формат, посмотрите следующий пример (он не предназначен для выполнения полезных действий):798799```python800from tkinter import ttk801import tkinter802803root = tkinter.Tk()804805style = ttk.Style()806style.layout("TMenubutton", [807 ("Menubutton.background", None),808 ("Menubutton.button", {"children":809 [("Menubutton.focus", {"children":810 [("Menubutton.padding", {"children":811 [("Menubutton.label", {"side": "left", "expand": 1})]812 })]813 })]814 }),815])816817mbtn = ttk.Menubutton(text='Text')818mbtn.pack()819root.mainloop()820```821822#### `element_create(elementname, etype, *args, **kw)`823824Создаёт новый элемент в текущей теме с заданным *etype*, который должен быть одним из «image», «from» или «vsapi». Последний доступен только в Tk 8.6a для Windows XP и Vista и здесь не описывается.825826Если используется «image», *args* должен содержать имя изображения по умолчанию, за которым следуют пары спецификация состояния/значение (это imagespec), а *kw* может иметь следующие параметры:827828> - **border=padding**829>830> padding – это список из не более четырёх целых чисел, задающих левую, верхнюю, правую и нижнюю границы соответственно.831> - **height=height**832>833> Задаёт минимальную высоту элемента. Если меньше нуля, по умолчанию используется высота базового изображения.834> - **padding=padding**835>836> Задаёт внутренний отступ элемента. По умолчанию равен значению border, если не указан.837> - **sticky=spec**838>839> Определяет расположение изображения внутри результирующей области. spec содержит ноль или более символов «n», «s», «w» или «e».840> - **width=width**841>842> Задаёт минимальную ширину элемента. Если меньше нуля, по умолчанию используется ширина базового изображения.843844Если в качестве значения *etype* используется «from», [`element_create()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Style.element_create) клонирует существующий элемент. *args* должен содержать имя темы, из которой будет склонирован элемент, и опционально – элемент для клонирования. Если этот элемент не указан, будет использован пустой элемент. *kw* игнорируется.845846#### `element_names()`847848Возвращает список элементов, определённых в текущей теме.849850#### `element_options(elementname)`851852Возвращает список параметров элемента *elementname*.853854#### `theme_create(themename, parent=None, settings=None)`855856Создаёт новую тему.857858Ошибка, если *themename* уже существует. Если указан *parent*, новая тема наследует стили, элементы и раскладки от родительской темы. Если присутствуют *settings*, ожидается, что они имеют тот же синтаксис, что используется для [`theme_settings()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Style.theme_settings).859860#### `theme_settings(themename, settings)`861862Временно устанавливает текущую тему на *themename*, применяет указанные *settings*, а затем восстанавливает предыдущую тему.863864Каждый ключ в *settings* является стилем, а каждое значение может содержать ключи «configure», «map», «layout» и «element create», и ожидается, что они имеют тот же формат, что указан методами [`Style.configure()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Style.configure), [`Style.map()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Style.map), [`Style.layout()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Style.layout) и [`Style.element_create()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Style.element_create) соответственно.865866В качестве примера немного изменим Combobox для темы по умолчанию:867868```python869from tkinter import ttk870import tkinter871872root = tkinter.Tk()873874style = ttk.Style()875style.theme_settings("default", {876 "TCombobox": {877 "configure": {"padding": 5},878 "map": {879 "background": [("active", "green2"),880 ("!disabled", "green4")],881 "fieldbackground": [("!disabled", "green3")],882 "foreground": [("focus", "OliveDrab1"),883 ("!disabled", "OliveDrab2")]884 }885 }886})887888combo = ttk.Combobox().pack()889890root.mainloop()891```892893#### `theme_names()`894895Возвращает список всех известных тем.896897#### `theme_use(themename=None)`898899Если *themename* не указан, возвращает текущую тему. В противном случае устанавливает текущую тему в *themename*, обновляет все виджеты и генерирует событие \<\<ThemeChanged\>\>.900901### Компоновки902903Макет может быть просто `None`, если он не принимает параметров, или словарём параметров, определяющих способ расположения элемента. Механизм компоновки использует упрощённую версию геометрического менеджера pack: для начальной области каждый элемент получает свой участок. Допустимые параметры/значения:904905> - **side: whichside**906>907> Указывает, с какой стороны области размещать элемент; одно из значений: top, right, bottom или left. Если не указано, элемент занимает всю область.908> - **sticky: nswe**909>910> Указывает, где размещается элемент внутри выделенной ему части.911> - **unit: 0 or 1**912>913> Если установлено в 1, заставляет элемент и всех его потомков рассматривать как один элемент для целей [`Widget.identify()`](https://python-all.ru/3.8/library/tkinter.ttk.html#tkinter.ttk.Widget.identify) и т.д. Используется для таких вещей, как бегунки полосы прокрутки с захватами.914> - **children: \[sublayout… \]**915>916> Задаёт список элементов для размещения внутри элемента. Каждый элемент – это кортеж (или другой тип последовательности), где первый элемент – название компоновки, а второй – [Layout](https://python-all.ru/3.8/library/tkinter.ttk.html#layouts).917