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

ttk.md

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

1> **Источник:** https://python-all.ru/2.7/library/ttk.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 24.2. [`ttk`](https://python-all.ru/2.7/library/ttk.html#module-ttk) – тематические виджеты Tk89Модуль [`ttk`](https://python-all.ru/2.7/library/ttk.html#module-ttk) предоставляет доступ к набору тематизированных виджетов Tk, который был представлен в Tk 8.5. Если Python не скомпилирован с Tk 8.5, код всё равно может использовать этот модуль при условии установки Tile. Однако некоторые возможности, предоставляемые новым Tk, такие как сглаживание шрифтов в X11, прозрачность окон (в X11 для этого потребуется композитный оконный менеджер), будут отсутствовать.1011Основная идея [`ttk`](https://python-all.ru/2.7/library/ttk.html#module-ttk) заключается в том, чтобы по возможности разделить код, реализующий поведение виджета, и код, отвечающий за его внешний вид.1213> **См. также**14>15> **[Поддержка стилизации виджетов Tk](https://python-all.ru/2.7/library/ttk.html)**16>17> Документ, в котором была представлена поддержка темизации Tk1819## 24.2.1. Использование Ttk2021Чтобы начать использовать Ttk, импортируйте его модуль:2223```python24import ttk25```2627Но код, подобный этому:2829```python30from Tkinter import *31```3233при желании может использовать следующее:3435```python36from Tkinter import *37from ttk import *38```3940И тогда несколько виджетов [`ttk`](https://python-all.ru/2.7/library/ttk.html#module-ttk) (`Button`, `Checkbutton`, `Entry`, `Frame`, `Label`, `LabelFrame`, `Menubutton`, `PanedWindow`, `Radiobutton`, `Scale` и `Scrollbar`) автоматически заменят стандартные виджеты Tk.4142Это даёт непосредственное преимущество использования новых виджетов, обеспечивая лучший внешний вид и ощущение (look & feel) на разных платформах, но следует учитывать, что они не полностью совместимы. Основное отличие в том, что такие опции виджетов, как “fg”, “bg” и другие, связанные со стилизацией, больше не присутствуют в виджетах Ttk. Используйте [`ttk.Style`](https://python-all.ru/2.7/library/ttk.html#ttk.Style), чтобы добиться того же (или лучшего) стиля.4344> **См. также**45>46> **[Преобразование существующих приложений для использования виджетов Tile](https://python-all.ru/2.7/library/ttk.html)**47>48> Текст, в котором на языке Tcl обсуждаются различия, обычно возникающие при преобразовании приложений для использования новых виджетов.4950## 24.2.2. Виджеты Ttk5152Ttk включает 17 виджетов, 11 из которых уже существуют в Tkinter: `Button`, `Checkbutton`, `Entry`, `Frame`, `Label`, `LabelFrame`, `Menubutton`, `PanedWindow`, `Radiobutton`, `Scale` и `Scrollbar`. Шесть новых классов виджетов: [`Combobox`](https://python-all.ru/2.7/library/ttk.html#ttk.Combobox), [`Notebook`](https://python-all.ru/2.7/library/ttk.html#ttk.Notebook), [`Progressbar`](https://python-all.ru/2.7/library/ttk.html#ttk.Progressbar), `Separator`, `Sizegrip` и [`Treeview`](https://python-all.ru/2.7/library/ttk.html#ttk.Treeview). Все эти классы являются подклассами [`Widget`](https://python-all.ru/2.7/library/ttk.html#ttk.Widget).5354Как уже говорилось, вы заметите изменения как во внешнем виде, так и в коде стилизации. Чтобы продемонстрировать последнее, ниже показан очень простой пример.5556Код Tk:5758```python59l1 = Tkinter.Label(text="Test", fg="black", bg="white")60l2 = Tkinter.Label(text="Test", fg="black", bg="white")61```6263Соответствующий код Ttk:6465```python66style = ttk.Style()67style.configure("BW.TLabel", foreground="black", background="white")6869l1 = ttk.Label(text="Test", style="BW.TLabel")70l2 = ttk.Label(text="Test", style="BW.TLabel")71```7273Для получения дополнительной информации о [TtkStyling](https://python-all.ru/2.7/library/ttk.html#ttkstyling) прочитайте документацию класса [`Style`](https://python-all.ru/2.7/library/ttk.html#ttk.Style).7475## 24.2.3. Виджет7677[`ttk.Widget`](https://python-all.ru/2.7/library/ttk.html#ttk.Widget) определяет стандартные опции и методы, поддерживаемые тематическими виджетами Tk и не предназначен для прямого создания экземпляров.7879### 24.2.3.1. Стандартные параметры8081Все виджеты [`ttk`](https://python-all.ru/2.7/library/ttk.html#module-ttk) принимают следующие опции:8283> | Параметр | Описание |84> | --- | --- |85> | класс | Определяет класс окна. Класс используется при запросе базы опций для других опций окна, для определения тегов привязки по умолчанию и для выбора стандартной компоновки и стиля виджета. Это опция только для чтения, которую можно задать только при создании окна. |86> | курсор | Определяет курсор мыши для виджета. Если задана пустая строка (по умолчанию), курсор наследуется от родительского виджета. |87> | takefocus | Определяет, принимает ли окно фокус при навигации с клавиатуры. Возвращается 0, 1 или пустая строка. Если 0, окно должно быть полностью пропущено при навигации. Если 1, окно должно получать фокус ввода, пока оно видимо. Пустая строка означает, что сценарии навигации сами решают, следует ли фокусироваться на окне. |88> | стиль | Может использоваться для указания пользовательского стиля виджета. |8990### 24.2.3.2. Параметры прокручиваемых виджетов9192Следующие параметры поддерживаются виджетами, управляемыми полосой прокрутки.9394> | опция | описание |95> | --- | --- |96> | xscrollcommand | Используется для взаимодействия с горизонтальными полосами прокрутки. Когда представление в окне виджета изменяется, виджет генерирует Tcl-команду на основе scrollcommand. Обычно эта опция содержит метод `Scrollbar.set()` какой-либо полосы прокрутки. Это приводит к обновлению полосы прокрутки при каждом изменении представления в окне. |97> | yscrollcommand | Используется для связи с вертикальными полосами прокрутки. Дополнительную информацию см. выше. |9899### 24.2.3.3. Параметры метки100101Следующие параметры поддерживаются метками, кнопками и другими виджетами, похожими на кнопки.102103> | опция | описание |104> | --- | --- |105> | текст | Задаёт текстовую строку для отображения внутри виджета. |106> | textvariable | Задаёт имя, значение которого будет использоваться вместо ресурса параметра text. |107> | подчёркивание | Если задан, указывает индекс (начиная с 0) символа для подчёркивания в текстовой строке. Подчёркнутый символ используется для мнемонической активации. |108> | изображение | Определяет изображение для отображения. Это список из одного или нескольких элементов. Первый элемент – имя изображения по умолчанию. Остальная часть списка – последовательность пар состояние/значение, как определено в [`Style.map()`](https://python-all.ru/2.7/library/ttk.html#ttk.Style.map), задающая различные изображения для использования, когда виджет находится в определённом состоянии или комбинации состояний. Все изображения в списке должны иметь одинаковый размер. |109> | составной | Определяет, как отображать изображение относительно текста, если присутствуют обе опции: текст и изображение. Допустимые значения: text: отображать только текст image: отображать только изображение top, bottom, left, right: отображать изображение соответственно над текстом, под текстом, слева от текста или справа от текста. none: по умолчанию. Отображать изображение, если оно есть, в противном случае – текст. |110> | ширина | Если больше нуля, определяет, сколько места (в ширину символов) выделить для текстовой метки; если меньше нуля, задаёт минимальную ширину. Если ноль или не указано, используется естественная ширина текстовой метки. |111112### 24.2.3.4. Параметры совместимости113114> | опция | описание |115> | --- | --- |116> | состояние | Может быть установлено в «normal» или «disabled» для управления битом состояния «disabled». Это опция только для записи: её установка изменяет состояние виджета, но метод [`Widget.state()`](https://python-all.ru/2.7/library/ttk.html#ttk.Widget.state) не влияет на эту опцию. |117118### 24.2.3.5. Состояния виджетов119120Состояние виджета – это битовая маска независимых флагов состояния.121122> | флаг | описание |123> | --- | --- |124> | активно | Курсор мыши находится над виджетом, и нажатие кнопки мыши вызовет некоторое действие. |125> | отключено | Виджет отключён под управлением программы. |126> | фокус | Виджет имеет фокус клавиатуры. |127> | нажато | Виджет нажат. |128> | выбрано | “On”, “true”, или “current” для таких элементов, как Checkbuttons и radiobuttons. |129> | фон | В Windows и Mac существует понятие «активного» или переднего окна. Состояние *background* устанавливается для виджетов в фоновом окне и сбрасывается для виджетов в переднем окне. |130> | только для чтения | Виджет не должен позволять пользователю вносить изменения. |131> | альтернативное | Альтернативный формат отображения, специфичный для виджета. |132> | недопустимое | Значение виджета недопустимо. |133134Спецификация состояния – это последовательность имён состояний, опционально с префиксом в виде восклицательного знака, указывающим, что бит сброшен.135136### 24.2.3.6. ttk.Widget137138Кроме методов, описанных ниже, класс [`ttk.Widget`](https://python-all.ru/2.7/library/ttk.html#ttk.Widget) поддерживает методы `Tkinter.Widget.cget()` и `Tkinter.Widget.configure()`.139140#### `class ttk.Widget`141142#### `identify(x, y)`143144Возвращает имя элемента в позиции *x* *y* или пустую строку, если точка не находится ни в одном элементе.145146*x* и *y* – это координаты в пикселях относительно виджета.147148#### `instate(statespec, callback=None, *args, **kw)`149150Проверяет состояние виджета. Если колбэк не указан, возвращает `True`, если состояние виджета соответствует *statespec*, и `False` в противном случае. Если колбэк указан, он вызывается с *args*, если состояние виджета соответствует *statespec*.151152#### `state([statespec=None])`153154Изменяет или читает состояние виджета. Если указан *statespec*, устанавливает состояние виджета соответствующим образом и возвращает новый *statespec*, указывающий, какие флаги были изменены. Если *statespec* не указан, возвращает текущие включённые флаги состояния.155156*statespec* обычно является списком или кортежем.157158## 24.2.4. Combobox159160Виджет [`ttk.Combobox`](https://python-all.ru/2.7/library/ttk.html#ttk.Combobox) объединяет текстовое поле с выпадающим списком значений. Этот виджет является подклассом `Entry`.161162Кроме методов, унаследованных от [`Widget`](https://python-all.ru/2.7/library/ttk.html#ttk.Widget) (`Widget.cget()`, `Widget.configure()`, [`Widget.identify()`](https://python-all.ru/2.7/library/ttk.html#ttk.Widget.identify), [`Widget.instate()`](https://python-all.ru/2.7/library/ttk.html#ttk.Widget.instate) и [`Widget.state()`](https://python-all.ru/2.7/library/ttk.html#ttk.Widget.state)), и методов, унаследованных от `Entry` (`Entry.bbox()`, `Entry.delete()`, `Entry.icursor()`, `Entry.index()`, `Entry.insert()`, `Entry.selection()`, `Entry.xview()`), этот класс имеет некоторые другие методы, описанные в [`ttk.Combobox`](https://python-all.ru/2.7/library/ttk.html#ttk.Combobox).163164### 24.2.4.1. Параметры165166Данный виджет принимает следующие параметры:167168> | опция | описание |169> | --- | --- |170> | exportselection | Логическое значение. Если установлено, выделение виджета связывается с выделением менеджера окон (которое может быть возвращено, например, вызовом `Misc.selection_get()`). |171> | выравнивание | Определяет выравнивание текста внутри виджета. Одно из значений: “left”, “center” или “right”. |172> | рост | Определяет высоту выпадающего списка в строках. |173> | postcommand | Скрипт (возможно, зарегистрированный с помощью `Misc.register()`), который вызывается непосредственно перед отображением значений. Он может указывать, какие значения отображать. |174> | состояние | Одно из значений: “normal”, “readonly” или “disabled”. В состоянии “readonly” значение нельзя редактировать напрямую, и пользователь может только выбрать одно из значений из выпадающего списка. В состоянии “normal” текстовое поле доступно для редактирования. В состоянии “disabled” никакое взаимодействие невозможно. |175> | textvariable | Определяет имя, значение которого связано со значением виджета. Всякий раз, когда значение, ассоциированное с этим именем, изменяется, значение виджета обновляется, и наоборот. См. `Tkinter.StringVar`. |176> | значения | Определяет список значений для отображения в выпадающем списке. |177> | ширина | Определяет целое число, указывающее желаемую ширину окна ввода, в символах среднего размера шрифта виджета. |178179### 24.2.4.2. Виртуальные события180181Виджет combobox генерирует виртуальное событие **\<\<ComboboxSelected\>\>**, когда пользователь выбирает элемент из списка значений.182183### 24.2.4.3. ttk.Combobox184185#### `class ttk.Combobox`186187#### `current([newindex=None])`188189Если указан *newindex*, устанавливает значение комбобокса на элемент с позицией *newindex*. В противном случае возвращает индекс текущего значения или -1, если текущее значение отсутствует в списке значений.190191#### `get()`192193Возвращает текущее значение комбобокса.194195#### `set(value)`196197Устанавливает значение комбобокса в *value*.198199## 24.2.5. Notebook200201Виджет Ttk Notebook управляет коллекцией окон и отображает по одному за раз. Каждое дочернее окно связано с вкладкой, которую пользователь может выбрать, чтобы сменить отображаемое окно.202203### 24.2.5.1. Параметры204205Этот виджет принимает следующие специфические параметры:206207> | опция | описание |208> | --- | --- |209> | рост | Если присутствует и больше нуля, задает желаемую высоту области панели (не включая внутренние отступы или вкладки). В противном случае используется максимальная высота всех панелей. |210> | отступы | Задаёт величину дополнительного пространства, добавляемого вокруг блокнота. Отступ – это список из не более четырёх спецификаций длины: слева, сверху, справа, снизу. Если указано меньше четырёх элементов, нижний отступ по умолчанию равен верхнему, правый – левому, а верхний – левому. |211> | ширина | Если присутствует и больше нуля, задаёт желаемую ширину области панели (без учёта внутреннего отступа). В противном случае используется максимальная ширина всех панелей. |212213### 24.2.5.2. Параметры вкладок214215Также существуют специальные параметры для вкладок:216217> | опция | описание |218> | --- | --- |219> | состояние | Может быть «normal», «disabled» или «hidden». Если «disabled», то вкладка не выбирается. Если «hidden», то вкладка не отображается. |220> | привязка | Определяет, как дочернее окно позиционируется внутри области панели. Значение – строка, содержащая ноль или более символов «n», «s», «e» или «w». Каждая буква обозначает сторону (север, юг, восток или запад), к которой будет прикреплено дочернее окно, в соответствии с менеджером геометрии `grid()`. |221> | отступы | Задаёт величину дополнительного пространства между блокнотом и данной панелью. Синтаксис такой же, как для параметра padding, используемого этим виджетом. |222> | текст | Задаёт текст, отображаемый на вкладке. |223> | изображение | Задаёт изображение для отображения на вкладке. Смотрите параметр image, описанный в [`Widget`](https://python-all.ru/2.7/library/ttk.html#ttk.Widget). |224> | составной | Задаёт способ отображения изображения относительно текста, если указаны оба параметра – текст и изображение. Допустимые значения см. в [Label Options](https://python-all.ru/2.7/library/ttk.html#label-options). |225> | подчёркивание | Задаёт индекс (начиная с 0) символа для подчеркивания в текстовой строке. Подчёркнутый символ используется для мнемонической активации, если вызывается [`Notebook.enable_traversal()`](https://python-all.ru/2.7/library/ttk.html#ttk.Notebook.enable_traversal). |226227### 24.2.5.3. Идентификаторы вкладок228229Параметр *tab\_id*, присутствующий в нескольких методах [`ttk.Notebook`](https://python-all.ru/2.7/library/ttk.html#ttk.Notebook), может принимать любую из следующих форм:230231- Целое число от нуля до количества вкладок.232- Имя дочернего окна.233- Позиционная спецификация вида «@x,y», идентифицирующая вкладку.234- Литеральная строка «current», идентифицирующая текущую выбранную вкладку.235- Строковый литерал «end», который возвращает количество вкладок (действителен только для [`Notebook.index()`](https://python-all.ru/2.7/library/ttk.html#ttk.Notebook.index)).236237### 24.2.5.4. Виртуальные события238239Этот виджет генерирует виртуальное событие **\<\<NotebookTabChanged\>\>** после выбора новой вкладки.240241### 24.2.5.5. ttk.Notebook242243#### `class ttk.Notebook`244245#### `add(child, **kw)`246247Добавляет новую вкладку в блокнот.248249Если окно в данный момент управляется блокнотом, но скрыто, оно восстанавливается на свою предыдущую позицию.250251Список доступных опций см. в [Tab Options](https://python-all.ru/2.7/library/ttk.html#tab-options).252253#### `forget(tab_id)`254255Удаляет вкладку, указанную *tab\_id*, снимает с отображения и управления связанное окно.256257#### `hide(tab_id)`258259Скрывает вкладку, указанную *tab\_id*.260261Вкладка не будет отображаться, но связанное окно остаётся под управлением блокнота, а его конфигурация запоминается. Скрытые вкладки можно восстановить командой [`add()`](https://python-all.ru/2.7/library/ttk.html#ttk.Notebook.add).262263#### `identify(x, y)`264265Возвращает имя элемента вкладки в позиции *x*, *y* или пустую строку, если элемент отсутствует.266267#### `index(tab_id)`268269Возвращает числовой индекс вкладки, указанной *tab\_id*, или общее количество вкладок, если *tab\_id* равно строке «end».270271#### `insert(pos, child, **kw)`272273Вставляет панель в указанную позицию.274275*pos* может быть строкой «end», целочисленным индексом или именем дочернего элемента, находящегося под управлением. Если *child* уже управляется блокнотом, он перемещается в указанную позицию.276277Список доступных опций см. в [Tab Options](https://python-all.ru/2.7/library/ttk.html#tab-options).278279#### `select([tab_id])`280281Выбирает указанную *tab\_id*.282283Будет отображено связанное дочернее окно, а ранее выбранное окно (если оно отличается) будет скрыто. Если *tab\_id* не указан, возвращается имя виджета текущей выбранной панели.284285#### `tab(tab_id, option=None, **kw)`286287Запрашивает или изменяет параметры указанной *tab\_id*.288289Если *kw* не указан, возвращает словарь значений опций вкладки. Если указан *option*, возвращает значение этой *option*. В противном случае устанавливает опции в соответствующие значения.290291#### `tabs()`292293Возвращает список окон, управляемых Notebook.294295#### `enable_traversal()`296297Включает навигацию с клавиатуры для окна верхнего уровня, содержащего этот блокнот.298299Это расширяет привязки для окна верхнего уровня, содержащего блокнот, следующим образом:300301- `Control-Tab`: выбирает вкладку, следующую за текущей выбранной.302- `Shift-Control-Tab`: выбирает вкладку, предшествующую текущей выбранной.303- `Alt-K`: где *K* – мнемонический (подчеркнутый) символ любой вкладки, выбирает эту вкладку.304305Несколько виджетов Notebook в одном окне верхнего уровня могут быть включены для навигации,\\nвключая вложенные Notebook. Однако навигация по Notebook работает\\nкорректно, только если все панели имеют тот Notebook, в котором они находятся, в качестве родительского виджета.306307## 24.2.6. Progressbar308309Виджет [`ttk.Progressbar`](https://python-all.ru/2.7/library/ttk.html#ttk.Progressbar) отображает состояние длительной операции. Он может работать в двух режимах: в детерминированном режиме показывается объём выполненной работы относительно общего объёма, а в недетерминированном режиме – анимация, сообщающая пользователю, что что-то происходит.310311### 24.2.6.1. Параметры312313Этот виджет принимает следующие специфические параметры:314315> | опция | описание |316> | --- | --- |317> | ориентация | Одно из «horizontal» или «vertical». Указывает ориентацию индикатора выполнения. |318> | длина | Указывает длину длинной оси индикатора выполнения (ширину, если горизонтальный, и высоту, если вертикальный). |319> | Режим | Одно из «determinate» или «indeterminate». |320> | максимум | Число, задающее максимальное значение. По умолчанию равно 100. |321> | значение | Текущее значение индикатора выполнения. В режиме «determinate» представляет объём выполненной работы. В режиме «indeterminate» интерпретируется как по модулю *maximum*; то есть индикатор выполнения завершает один «цикл», когда его значение увеличивается на *maximum*. |322> | переменная | Имя, связанное со значением опции. Если задано, значение индикатора выполнения автоматически устанавливается равным значению этого имени при каждом его изменении. |323> | фаза | Опция только для чтения. Виджет периодически увеличивает значение этой опции, когда его значение больше 0 и, в режиме «determinate», меньше maximum. Эта опция может использоваться текущей темой для дополнительных анимационных эффектов. |324325### 24.2.6.2. ttk.Progressbar326327#### `class ttk.Progressbar`328329#### `start([interval])`330331Начинает режим автоинкремента: планирует повторяющееся событие таймера, которое вызывает [`Progressbar.step()`](https://python-all.ru/2.7/library/ttk.html#ttk.Progressbar.step) каждые *interval* миллисекунд. Если не указано, *interval* по умолчанию равен 50 миллисекундам.332333#### `step([amount])`334335Увеличивает значение индикатора выполнения на *amount*.336337*amount* по умолчанию равен 1.0, если не указан.338339#### `stop()`340341Останавливает режим автоинкремента: отменяет любые повторяющиеся события таймера, запущенные [`Progressbar.start()`](https://python-all.ru/2.7/library/ttk.html#ttk.Progressbar.start) для данного индикатора выполнения.342343## 24.2.7. Separator344345Виджет `ttk.Separator` отображает горизонтальную или вертикальную разделительную\\nлинию.346347Он не имеет других методов, кроме унаследованных от [`ttk.Widget`](https://python-all.ru/2.7/library/ttk.html#ttk.Widget).348349### 24.2.7.1. Параметры350351Этот виджет принимает следующую специфическую опцию:352353> | опция | описание |354> | --- | --- |355> | ориентация | Одно из «horizontal» или «vertical». Указывает ориентацию разделителя. |356357## 24.2.8. Sizegrip358359Виджет `ttk.Sizegrip` (также известный как маркер изменения размера) позволяет пользователю\\nизменять размер содержащего окна верхнего уровня, нажимая и перетаскивая маркер.360361Этот виджет не имеет ни специфических опций, ни специфических методов, кроме унаследованных от [`ttk.Widget`](https://python-all.ru/2.7/library/ttk.html#ttk.Widget).362363### 24.2.8.1. Примечания по платформе364365- На Mac OS X в окна верхнего уровня по умолчанию автоматически добавляется встроенный размерный захват. Добавление `Sizegrip` безвредно, поскольку встроенный захват просто перекроет виджет.366367### 24.2.8.2. Ошибки368369- Если положение содержащего окна верхнего уровня было задано относительно правого\\nили нижнего края экрана (например, ….), виджет `Sizegrip` не будет\\nизменять размер окна.370- Этот виджет поддерживает только изменение размера в направлении «southeast».371372## 24.2.9. Treeview373374Виджет [`ttk.Treeview`](https://python-all.ru/2.7/library/ttk.html#ttk.Treeview) отображает иерархическую коллекцию элементов.\\nКаждый элемент имеет текстовую метку, необязательное изображение и необязательный список значений\\nданных. Значения данных отображаются в последовательных столбцах после метки\\nдерева.375376Порядок отображения значений данных можно контролировать, установив опцию виджета `displaycolumns`. Древовидный виджет также может отображать заголовки столбцов. Доступ к столбцам можно получить по номерам или символьным именам, перечисленным в опции columns виджета. См. [Идентификаторы столбцов](https://python-all.ru/2.7/library/ttk.html#column-identifiers).377378Каждый элемент идентифицируется уникальным именем. Виджет сгенерирует ID элементов, если они не предоставлены вызывающей стороной. Существует выделенный корневой элемент, с именем `{}`. Сам корневой элемент не отображается; его дочерние элементы появляются на верхнем уровне иерархии.379380Каждый элемент также имеет список тегов, которые можно использовать для связывания событий с отдельными элементами и управления внешним видом элемента.381382Виджет Treeview поддерживает горизонтальную и вертикальную прокрутку в соответствии с опциями, описанными в [Параметры прокручиваемых виджетов](https://python-all.ru/2.7/library/ttk.html#scrollable-widget-options), и методами [`Treeview.xview()`](https://python-all.ru/2.7/library/ttk.html#ttk.Treeview.xview) и [`Treeview.yview()`](https://python-all.ru/2.7/library/ttk.html#ttk.Treeview.yview).383384### 24.2.9.1. Параметры385386Этот виджет принимает следующие специфические параметры:387388> | опция | описание |389> | --- | --- |390> | столбцы | Список идентификаторов столбцов, определяющий количество столбцов и их имена. |391> | отображаемые столбцы | Список идентификаторов столбцов (символьных или целочисленных индексов), определяющий, какие столбцы данных отображаются и в каком порядке они появляются, или строка «#all». |392> | рост | Определяет количество строк, которые должны быть видны. Примечание: запрошенная ширина определяется суммой ширин столбцов. |393> | отступы | Определяет внутренний отступ виджета. Отступ – это список из не более чем четырёх спецификаций длины. |394> | режим выбора | Управляет тем, как встроенные привязки класса управляют выделением. Одно из значений: «extended», «browse» или «none». Если установлено «extended» (по умолчанию), можно выбрать несколько элементов. Если «browse», единовременно выбирается только один элемент. Если «none», выделение не будет изменяться. Обратите внимание, что код приложения и привязки тегов могут установить выделение по своему усмотрению, независимо от значения этой опции. |395> | отображение | Список, содержащий ноль или более следующих значений, определяющий, какие элементы дерева отображать. tree: отображать метки дерева в столбце #0. headings: отображать строку заголовков. По умолчанию отображаются «tree headings», т.е. показываются все элементы. **Примечание**: столбец #0 всегда относится к столбцу дерева, даже если show=«tree» не указано. |396397### 24.2.9.2. Параметры элемента398399Следующие опции элементов могут быть указаны для элементов в командах виджета insert и item.400401> | опция | описание |402> | --- | --- |403> | текст | Текстовая метка, отображаемая для элемента. |404> | изображение | Изображение Tk, отображаемое слева от метки. |405> | значения | Список значений, связанных с элементом. Каждый элемент должен содержать столько же значений, сколько столбцов в опции columns виджета. Если значений меньше, чем столбцов, оставшиеся значения считаются пустыми. Если значений больше, чем столбцов, лишние значения игнорируются. |406> | открыт | Значение True/False, указывающее, должны ли дочерние элементы отображаться или быть скрытыми. |407> | теги | Список тегов, связанных с этим элементом. |408409### 24.2.9.3. Параметры тега410411Для тегов могут быть указаны следующие опции:412413> | опция | описание |414> | --- | --- |415> | передний план | Определяет цвет текста. |416> | фон | Определяет цвет фона ячейки или элемента. |417> | шрифт | Определяет шрифт, используемый при отрисовке текста. |418> | изображение | Определяет изображение элемента, если опция image элемента пуста. |419420### 24.2.9.4. Идентификаторы столбцов421422Идентификаторы столбцов могут принимать одну из следующих форм:423424- Символическое имя из списка опции columns.425- Целое число n, указывающее n-й столбец данных.426- Строка вида #n, где n – целое число, указывающая n-й столбец отображения.427428Примечания:429430- Значения опций элемента могут отображаться в порядке, отличном от порядка, в котором они хранятся.431- Столбец #0 всегда ссылается на столбец дерева, даже если show="tree" не указан.432433Номер столбца данных – это индекс в списке значений опций элемента; номер столбца отображения – это номер столбца в дереве, где отображаются значения. Метки дерева отображаются в столбце #0. Если опция displaycolumns не задана, то столбец данных n отображается в столбце #n+1. И снова, **столбец #0 всегда ссылается на столбец дерева**.434435### 24.2.9.5. Виртуальные события436437Виджет Treeview генерирует следующие виртуальные события.438439> | событие | описание |440> | --- | --- |441> | \<\<TreeviewSelect\>\> | Генерируется при каждом изменении выделения. |442> | \<\<TreeviewOpen\>\> | Генерируется непосредственно перед установкой элемента фокуса в open=True. |443> | \<\<TreeviewClose\>\> | Генерируется сразу после установки элемента фокуса в open=False. |444445Методы [`Treeview.focus()`](https://python-all.ru/2.7/library/ttk.html#ttk.Treeview.focus) и [`Treeview.selection()`](https://python-all.ru/2.7/library/ttk.html#ttk.Treeview.selection) можно использовать для определения затронутого элемента или элементов.446447### 24.2.9.6. ttk.Treeview448449#### `class ttk.Treeview`450451#### `bbox(item, column=None)`452453Возвращает ограничивающую рамку (относительно окна виджета treeview) указанного *элемента* в формате (x, y, width, height).454455Если указан *столбец*, возвращается ограничивающая рамка этой ячейки. Если *элемент* не виден (т.е. является потомком закрытого элемента или находится за пределами экрана при прокрутке), возвращается пустая строка.456457#### `get_children([item])`458459Возвращает список дочерних элементов, принадлежащих *элементу*.460461Если *элемент* не указан, возвращает корневые дочерние элементы.462463#### `set_children(item, *newchildren)`464465Заменяет потомка *элемента* на *новые дочерние элементы*.466467Дочерние элементы, присутствующие в *элементе*, но отсутствующие в *newchildren*, отсоединяются от дерева. Ни один элемент в *newchildren* не может быть предком *элемента*. Обратите внимание, что если не указать *newchildren*, это приведёт к отсоединению дочерних элементов *элемента*.468469#### `column(column, option=None, **kw)`470471Запрашивает или изменяет параметры для указанного *столбца*.472473Если *kw* не передан, возвращает словарь значений параметров столбца. Если указан *параметр*, возвращается значение этого *параметра*. В противном случае устанавливает параметры в соответствующие значения.474475Допустимые параметры/значения:476477- **идентификатор**478479  Возвращает имя столбца. Это параметр только для чтения.480- **anchor: одно из стандартных значений привязки Tk.**481482  Определяет, как должен быть выровнен текст в этом столбце относительно ячейки.483- **minwidth: ширина**484485  Минимальная ширина столбца в пикселях. Виджет treeview не сделает столбец уже, чем указано этим параметром, при изменении размера виджета или перетаскивании столбца пользователем.486- **растяжение: True/False**487488  Определяет, должна ли ширина столбца изменяться при изменении размера виджета.489- **width: ширина**490491  Ширина столбца в пикселях.492493Чтобы настроить столбец дерева, вызовите этот метод с column = “#0”.494495#### `delete(*items)`496497Удаляет все указанные *items* и всех их потомков.498499Корневой элемент не может быть удалён.500501#### `detach(*items)`502503Открепляет все указанные *items* от дерева.504505Элементы и все их потомки по-прежнему существуют и могут быть повторно вставлены в другое место дерева, но не будут отображаться.506507Корневой элемент не может быть откреплён.508509#### `exists(item)`510511Возвращает `True`, если указанный *элемент* присутствует в дереве.512513#### `focus([item=None])`514515Если указан *item*, устанавливает элемент фокуса на *item*. В противном случае возвращает текущий элемент фокуса или '' (пустую строку), если его нет.516517#### `heading(column, option=None, **kw)`518519Запрашивает или изменяет параметры заголовка для указанного *column*.520521Если *kw* не указан, возвращает словарь значений параметров заголовка. Если указан *option*, возвращается значение для этого *option*. В противном случае устанавливает параметры в соответствующие значения.522523Допустимые параметры/значения:524525- **text: текст**526527  Текст, отображаемый в заголовке столбца.528- **изображение: imageName**529530  Указывает изображение, отображаемое справа от заголовка столбца.531- **привязка: anchor**532533  Указывает, как должен быть выровнен текст заголовка. Одно из стандартных значений привязки Tk.534- **command: колбэк**535536  Колбэк, вызываемый при нажатии на метку заголовка.537538Для настройки заголовка столбца дерева вызовите этот метод с column = "#0".539540#### `identify(component, x, y)`541542Возвращает описание указанного *component* в точке, заданной *x* и *y*, или пустую строку, если такой *component* отсутствует в этой позиции.543544#### `identify_row(y)`545546Возвращает идентификатор элемента в позиции *y*.547548#### `identify_column(x)`549550Возвращает идентификатор столбца данных ячейки в позиции *x*.551552Столбец дерева имеет ID #0.553554#### `identify_region(x, y)`555556Возвращает одно из:557558| регион | значение |559| --- | --- |560| заголовок | Область заголовка дерева. |561| разделитель | Промежуток между заголовками двух столбцов. |562| дерево | Область дерева. |563| ячейка | Ячейка данных. |564565Доступность: Tk 8.6.566567#### `identify_element(x, y)`568569Возвращает элемент в позиции *x*, *y*.570571Доступность: Tk 8.6.572573#### `index(item)`574575Возвращает целочисленный индекс *item* в списке дочерних элементов его родителя.576577#### `insert(parent, index, iid=None, **kw)`578579Создаёт новый элемент и возвращает идентификатор созданного элемента.580581*parent* – это идентификатор родительского элемента или пустая строка для создания нового элемента верхнего уровня. *index* – целое число или значение «end», указывающее, куда в списке дочерних элементов родителя вставить новый элемент. Если *index* меньше или равен нулю, новый узел вставляется в начало; если *index* больше или равен текущему количеству дочерних элементов, он вставляется в конец. Если указан *iid*, он используется в качестве идентификатора элемента; *iid* не должен уже существовать в дереве. В противном случае создаётся новый уникальный идентификатор.582583Смотрите [Параметры элементов](https://python-all.ru/2.7/library/ttk.html#item-options) для списка доступных параметров.584585#### `item(item[, option[, **kw]])`586587Запрашивает или изменяет параметры указанного *item*.588589Если параметры не заданы, возвращается словарь с парами параметр/значение для элемента. Если указан *option*, возвращается значение этого параметра. В противном случае устанавливает параметры в соответствии со значениями, переданными в *kw*.590591#### `move(item, parent, index)`592593Перемещает *item* на позицию *index* в список дочерних элементов *parent*.594595Перемещать элемент под один из его потомков запрещено. Если *index* меньше или равен нулю, *item* перемещается в начало; если больше или равен количеству дочерних элементов, перемещается в конец. Если *item* был отсоединён, он повторно присоединяется.596597#### `next(item)`598599Возвращает идентификатор следующего соседнего элемента *item* или пустую строку, если *item* является последним дочерним элементом своего родителя.600601#### `parent(item)`602603Возвращает идентификатор родителя *элемента* или пустую строку, если *элемент* находится на верхнем уровне иерархии.604605#### `prev(item)`606607Возвращает идентификатор *предыдущего братского элемента* или пустую строку, если *элемент* является первым потомком своего родителя.608609#### `reattach(item, parent, index)`610611Псевдоним для [`Treeview.move()`](https://python-all.ru/2.7/library/ttk.html#ttk.Treeview.move).612613#### `see(item)`614615Обеспечивает видимость *элемента*.616617Устанавливает для всех предков *элемента* опцию открытия в `True` и при необходимости прокручивает виджет, чтобы *элемент* оказался в видимой части дерева.618619#### `selection([selop=None[, items=None]])`620621Если *selop* не указан, возвращает выбранные элементы. В противном случае действует в соответствии со следующими методами выбора.622623#### `selection_set(items)`624625*Элементы* становятся новым выделением.626627#### `selection_add(items)`628629Добавляет *элементы* в выделение.630631#### `selection_remove(items)`632633Удаляет *элементы* из выделения.634635#### `selection_toggle(items)`636637Переключает состояние выделения каждого элемента из *items*.638639#### `set(item, column=None, value=None)`640641С одним аргументом возвращает словарь пар столбец/значение для указанного *элемента*. С двумя аргументами возвращает текущее значение указанного *столбца*. С тремя аргументами устанавливает значение заданного *столбца* в заданном *элементе* равным указанному *значению*.642643#### `tag_bind(tagname, sequence=None, callback=None)`644645Привязывает колбэк к заданному событию *sequence* для тега *tagname*. Когда событие доставляется элементу, вызываются колбэки для каждого из тегов этого элемента.646647#### `tag_configure(tagname, option=None, **kw)`648649Запрашивает или изменяет параметры для указанного *tagname*.650651Если *kw* не указан, возвращает словарь настроек параметров для *tagname*. Если указан *option*, возвращает значение этого *параметра* для указанного *tagname*. В противном случае устанавливает параметры в соответствующие значения для заданного *tagname*.652653#### `tag_has(tagname[, item])`654655Если указан *элемент*, возвращает 1 или 0 в зависимости от того, имеет ли указанный *элемент* заданное *имя тега*. В противном случае возвращает список всех элементов, имеющих указанный тег.656657Доступность: Tk 8.6658659#### `xview(*args)`660661Запрашивает или изменяет горизонтальное положение treeview.662663#### `yview(*args)`664665Запрашивает или изменяет вертикальное положение treeview.666667## 24.2.10. Стилизация Ttk668669Каждому виджету в [`ttk`](https://python-all.ru/2.7/library/ttk.html#module-ttk) назначается стиль, который определяет набор элементов, составляющих виджет, и то, как они расположены, а также динамические и стандартные настройки для опций элементов. По умолчанию имя стиля совпадает с именем класса виджета, но может быть переопределено опцией стиля виджета. Если имя класса виджета неизвестно, используйте метод `Misc.winfo_class()` (somewidget.winfo\_class()).670671> **См. также**672>673> **[Доклад на конференции Tcl’2004](https://python-all.ru/2.7/library/ttk.html)**674>675> В этом документе объясняется, как работает механизм тем.676677#### `class ttk.Style`678679Этот класс используется для управления базой данных стилей.680681#### `configure(style, query_opt=None, **kw)`682683Запрашивает или устанавливает значение по умолчанию для указанных параметров в *style*.684685Каждый ключ в *kw* является параметром, а каждое значение – строкой, определяющей значение этого параметра.686687Например, чтобы изменить все кнопки по умолчанию на плоские кнопки с отступами и другим цветом фона, выполните:688689```python690import ttk691import Tkinter692693root = Tkinter.Tk()694695ttk.Style().configure("TButton", padding=6, relief="flat",696   background="#ccc")697698btn = ttk.Button(text="Sample")699btn.pack()700701root.mainloop()702```703704#### `map(style, query_opt=None, **kw)`705706Запрашивает или устанавливает динамические значения указанных параметров в *style*.707708Каждый ключ в *kw* – это опция, а каждое значение должно быть списком или кортежем (обычно), содержащим спецификации состояний, сгруппированные в кортежи, списки или что-то ещё по вашему усмотрению. Спецификация состояния – это комбинация из одного или нескольких состояний, за которыми следует значение.709710Пример:711712```python713import Tkinter714import ttk715716root = Tkinter.Tk()717718style = ttk.Style()719style.map("C.TButton",720    foreground=[('pressed', 'red'), ('active', 'blue')],721    background=[('pressed', '!disabled', 'black'), ('active', 'white')]722    )723724colored_btn = ttk.Button(text="Test", style="C.TButton").pack()725726root.mainloop()727```728729Обратите внимание, что порядок последовательностей (состояния, значение) для опции имеет значение. В предыдущем примере, если изменить порядок на `[('active', 'blue'), ('pressed', 'red')]` в опции foreground, то для виджета в активном состоянии или состоянии нажатия будет установлен синий цвет переднего плана.730731#### `lookup(style, option, state=None, default=None)`732733Возвращает значение, указанное для параметра *option* в стиле *style*.734735Если указан параметр *state*, он должен быть последовательностью из одного или нескольких состояний. Если задан аргумент *default*, он используется как запасное значение, если спецификация для параметра не найдена.736737Чтобы проверить, какой шрифт использует кнопка (Button) по умолчанию, выполните:738739```python740import ttk741742print ttk.Style().lookup("TButton", "font")743```744745#### `layout(style, layoutspec=None)`746747Определяет макет виджета для указанного стиля *style*. Если *layoutspec* опущен, возвращает спецификацию макета для указанного стиля.748749*layoutspec*, если указан, должен быть списком или другим типом последовательности (исключая строки), где каждый элемент должен быть кортежем, первый элемент – имя макета, а второй элемент должен иметь формат, описанный в разделе [Layouts](https://python-all.ru/2.7/library/ttk.html#layouts).750751Чтобы понять формат, посмотрите следующий пример (он не предназначен для выполнения полезных действий):752753```python754import ttk755import Tkinter756757root = Tkinter.Tk()758759style = ttk.Style()760style.layout("TMenubutton", [761   ("Menubutton.background", None),762   ("Menubutton.button", {"children":763       [("Menubutton.focus", {"children":764           [("Menubutton.padding", {"children":765               [("Menubutton.label", {"side": "left", "expand": 1})]766           })]767       })]768   }),769])770771mbtn = ttk.Menubutton(text='Text')772mbtn.pack()773root.mainloop()774```775776#### `element_create(elementname, etype, *args, **kw)`777778Создаёт новый элемент в текущей теме с заданным *etype*, который должен быть одним из «image», «from» или «vsapi». Последний доступен только в Tk 8.6a для Windows XP и Vista и здесь не описывается.779780Если используется «image», *args* должен содержать имя изображения по умолчанию, за которым следуют пары спецификация состояния/значение (это imagespec), а *kw* может иметь следующие параметры:781782> - **border=padding**783>784>   padding – это список из не более четырёх целых чисел, задающих левую, верхнюю, правую и нижнюю границы соответственно.785> - **height=height**786>787>   Задаёт минимальную высоту элемента. Если меньше нуля, по умолчанию используется высота базового изображения.788> - **padding=padding**789>790>   Задаёт внутренний отступ элемента. По умолчанию равен значению border, если не указан.791> - **sticky=spec**792>793>   Определяет расположение изображения внутри результирующей области. spec содержит ноль или более символов «n», «s», «w» или «e».794> - **width=width**795>796>   Задаёт минимальную ширину элемента. Если меньше нуля, по умолчанию используется ширина базового изображения.797798Если в качестве значения *etype* используется «from», [`element_create()`](https://python-all.ru/2.7/library/ttk.html#ttk.Style.element_create) клонирует существующий элемент. *args* должен содержать имя темы, из которой будет склонирован элемент, и опционально – элемент для клонирования. Если этот элемент не указан, будет использован пустой элемент. *kw* игнорируется.799800#### `element_names()`801802Возвращает список элементов, определённых в текущей теме.803804#### `element_options(elementname)`805806Возвращает список параметров элемента *elementname*.807808#### `theme_create(themename, parent=None, settings=None)`809810Создаёт новую тему.811812Ошибка, если *themename* уже существует. Если указан *parent*, новая тема наследует стили, элементы и раскладки от родительской темы. Если присутствуют *settings*, ожидается, что они имеют тот же синтаксис, что используется для [`theme_settings()`](https://python-all.ru/2.7/library/ttk.html#ttk.Style.theme_settings).813814#### `theme_settings(themename, settings)`815816Временно устанавливает текущую тему на *themename*, применяет указанные *settings*, а затем восстанавливает предыдущую тему.817818Каждый ключ в *settings* является стилем, а каждое значение может содержать ключи «configure», «map», «layout» и «element create», и ожидается, что они имеют тот же формат, что указан методами [`Style.configure()`](https://python-all.ru/2.7/library/ttk.html#ttk.Style.configure), [`Style.map()`](https://python-all.ru/2.7/library/ttk.html#ttk.Style.map), [`Style.layout()`](https://python-all.ru/2.7/library/ttk.html#ttk.Style.layout) и [`Style.element_create()`](https://python-all.ru/2.7/library/ttk.html#ttk.Style.element_create) соответственно.819820В качестве примера немного изменим Combobox для темы по умолчанию:821822```python823import ttk824import Tkinter825826root = Tkinter.Tk()827828style = ttk.Style()829style.theme_settings("default", {830   "TCombobox": {831       "configure": {"padding": 5},832       "map": {833           "background": [("active", "green2"),834                          ("!disabled", "green4")],835           "fieldbackground": [("!disabled", "green3")],836           "foreground": [("focus", "OliveDrab1"),837                          ("!disabled", "OliveDrab2")]838       }839   }840})841842combo = ttk.Combobox().pack()843844root.mainloop()845```846847#### `theme_names()`848849Возвращает список всех известных тем.850851#### `theme_use([themename])`852853Если *themename* не указан, возвращает текущую тему. В противном случае устанавливает текущую тему в *themename*, обновляет все виджеты и генерирует событие \<\<ThemeChanged\>\>.854855### 24.2.10.1. Макеты856857Макет может быть просто `None`, если он не принимает параметров, или словарём параметров, определяющих способ расположения элемента. Механизм компоновки использует упрощённую версию геометрического менеджера pack: для начальной области каждый элемент получает свой участок. Допустимые параметры/значения:858859> - **side: какая сторона**860>861>   Указывает, с какой стороны области размещать элемент; одно из значений: top, right, bottom или left. Если не указано, элемент занимает всю область.862> - **прикрепление: nswe**863>864>   Указывает, где размещается элемент внутри выделенной ему части.865> - **unit: 0 или 1**866>867>   Если установлено в 1, заставляет элемент и всех его потомков рассматривать как один элемент для целей [`Widget.identify()`](https://python-all.ru/2.7/library/ttk.html#ttk.Widget.identify) и т.д. Используется для таких вещей, как бегунки полосы прокрутки с захватами.868> - **children: \[sublayout… \]**869>870>   Задаёт список элементов для размещения внутри элемента. Каждый элемент – это кортеж (или другой тип последовательности), где первый элемент – название компоновки, а второй – [Layout](https://python-all.ru/2.7/library/ttk.html#layouts).871