# `tkinter.ttk` — Tk themed widgets

Вихідний код: Lib/tkinter/ttk.py

The `tkinter.ttk` module provides access to the Tk themed widget set, introduced in Tk 8.5. It provides additional benefits including anti-aliased font rendering under X11 and window transparency (requiring a composition window manager on X11).

Основна ідея `tkinter.ttk` полягає в тому, щоб відокремити, наскільки це можливо, код, що реалізує поведінку віджета, від коду, що реалізує його вигляд.

Дивись також

Tk Widget Styling Support

  Документ, який представляє підтримку тем для Tk

## Використання Ttk

Щоб почати використовувати Ttk, імпортуйте його модуль:

    from tkinter import ttk

Щоб замінити базові віджети Tk, імпорт має слідувати за імпортом Tk:

    from tkinter import *
    from tkinter.ttk import *

Цей код викликає кілька віджетів `tkinter.ttk` (`Button`, `Checkbutton`, `Entry`, `Frame`, `Label`, `LabelFrame`, `Menubutton`, `PanedWindow`, `Radiobutton`, `Scale` і `Scrollbar`) для автоматичної заміни віджетів Tk.

Це має безпосередню користь від використання нових віджетів, які надають кращий вигляд і відчуття на різних платформах; однак замінні віджети не є повністю сумісними. Основна відмінність полягає в тому, що параметри віджетів, такі як «fg», «bg» та інші, пов’язані зі стилями віджетів, більше не присутні у віджетах Ttk. Замість цього використовуйте клас `ttk.Style` для покращення ефектів стилю.

Дивись також

Converting existing applications to use Tile widgets

  Монографія (з використанням термінології Tcl) про відмінності, які зазвичай виникають під час переміщення програм на використання нових віджетів.

## Віджети Ttk

Ttk поставляється з 18 віджетами, дванадцять із яких уже існували в tkinter: `Button`, `Checkbutton`, `Entry`, `Frame`, `Label`, `LabelFrame`, `Menubutton`, `PanedWindow`, `Radiobutton`, `Scale`, `Scrollbar` і `Spinbox`. Інші шість нові: `Combobox`, `Notebook`, `Progressbar`, `Separator`, `Sizegrip` і `Treeview`. І всі вони є підкласами `Widget`.

Використання віджетів Ttk покращує зовнішній вигляд програми. Як обговорювалося вище, існують відмінності в тому, як кодується стиль.

Tk код:

    l1 = tkinter.Label(text="Test", fg="black", bg="white")
    l2 = tkinter.Label(text="Test", fg="black", bg="white")

Код Ttk:

    style = ttk.Style()
    style.configure("BW.TLabel", foreground="black", background="white")

    l1 = ttk.Label(text="Test", style="BW.TLabel")
    l2 = ttk.Label(text="Test", style="BW.TLabel")

Щоб дізнатися більше про TtkStyling, перегляньте документацію класу `Style`.

## Віджет

`ttk.Widget` визначає стандартні опції та методи, які підтримуються віджетами на тему Tk, і не передбачається безпосередньо створювати екземпляри.

### Стандартні параметри

All the `ttk` Widgets accept the following options:

Варіант | опис
--- | ---
клас | Визначає клас вікна. Клас використовується під час запиту бази даних параметрів щодо інших параметрів вікна, щоб визначити теги прив’язки за замовчуванням для вікна та вибрати типовий макет і стиль віджета. Цей параметр доступний лише для читання, і його можна вказати лише під час створення вікна.
курсор | Визначає курсор миші, який буде використовуватися для віджета. Якщо встановлено порожній рядок (за замовчуванням), курсор успадковується для батьківського віджета.
зосередитися | Визначає, чи вікно приймає фокус під час обходу клавіатури. Повертається 0, 1 або порожній рядок. Якщо повертається 0, це означає, що вікно слід повністю пропустити під час обходу клавіатури. Якщо 1, це означає, що вікно має отримувати фокус введення, поки воно доступне для перегляду. А порожній рядок означає, що сценарії обходу приймають рішення про те, фокусуватись на вікні чи ні.
стиль | Може використовуватися для визначення власного стилю віджета.

### Параметри віджета з можливістю прокручування

Наступні параметри підтримуються віджетами, якими керує смуга прокрутки.

Варіант | опис
--- | ---
xscrollcommand | Використовується для зв’язку з горизонтальними смугами прокручування. Коли вид у вікні віджета змінюється, віджет генеруватиме команду Tcl на основі команди прокручування. Зазвичай цей параметр складається з методу `Scrollbar.set()` деякої смуги прокрутки. Це призведе до того, що смуга прокрутки оновлюватиметься щоразу, коли змінюватиметься вікно.
yscrollcommand | Використовується для зв’язку з вертикальними смугами прокручування. Додаткову інформацію див. вище.

### Параметри етикетки

Наступні параметри підтримуються мітками, кнопками та іншими кнопкоподібними віджетами.

Варіант | опис
--- | ---
текст | Визначає текстовий рядок, який буде відображатися всередині віджета.
текстова змінна | Визначає ім’я, значення якого використовуватиметься замість текстового параметра ресурсу.
підкреслити | Якщо встановлено, вказує індекс (від 0) символу, який потрібно підкреслити в текстовому рядку. Символ підкреслення використовується для мнемонічної активації.
зображення | Визначає зображення для відображення. Це список з 1 або більше елементів. Першим елементом є назва зображення за замовчуванням. Решта списку — це послідовність пар станів/значення, як визначено `Style.map()`, із зазначенням різних зображень для використання, коли віджет перебуває в певному стані або комбінації станів. Усі зображення в списку повинні мати однаковий розмір.
з’єднання | Визначає спосіб відображення зображення відносно тексту, якщо присутні параметри як тексту, так і зображень. Допустимі значення: текст: відображати лише текст зображення: відображати лише зображення зверху, знизу, зліва, справа: відображення зображення вище, нижче, ліворуч або праворуч від тексту відповідно. немає: за замовчуванням. відобразити зображення, якщо воно є, інакше текст.
ширина | Якщо значення більше нуля, указує, скільки місця (у ширині символів) потрібно виділити для текстової мітки, якщо значення менше нуля, указує мінімальну ширину. Якщо дорівнює нулю або не вказано, використовується природна ширина текстової мітки.

### Параметри сумісності

Варіант | опис
--- | ---
стан | Може бути встановлено на «normal» або «disabled» для керування бітом стану «disabled». Це параметр лише для запису: його встановлення змінює стан віджета, але метод `Widget.state()` не впливає на цей параметр.

### Віджети держав

Стан віджета - це растрова карта незалежних прапорів стану.

Прапор | опис
--- | ---
активний | Курсор миші знаходиться над віджетом, і натискання кнопки миші призведе до виконання певної дії
вимкнено | Віджет вимкнено під керуванням програми
фокус | Віджет має фокус клавіатури
натиснутий | Віджет натискається
вибрано | «Увімкнено», «справжнє» або «поточне» для таких речей, як Checkbuttons і радіокнопки
фон | Windows і Mac мають поняття «активного» або вікна переднього плану. Фоновий стан встановлено для віджетів у фоновому вікні та знято для віджетів у вікні переднього плану
лише для читання | Віджет не повинен дозволяти змінювати користувач
чергувати | Альтернативний формат відображення для віджетів
недійсний | Значення віджета недійсне

Специфікація стану — це послідовність назв станів, необов’язково із знаком оклику, який вказує, що біт вимкнено.

### ttk.Віджет

Окрім методів, описаних нижче, `ttk.Widget` підтримує методи `tkinter.Widget.cget()` і `tkinter.Widget.configure()`.

class tkinter.ttk.Widget
  identify(x, y)

    Повертає назву елемента в позиції x y або порожній рядок, якщо точка не лежить у жодному елементі.

    x і y — координати пікселів відносно віджета.

  instate(statespec, callback=None, *args, **kw)

    Перевірте стан віджета. Якщо зворотний виклик не вказано, повертає `True`, якщо стан віджета відповідає statespec, і `False` в іншому випадку. Якщо вказано зворотний виклик, він викликається з аргументами, якщо стан віджета відповідає statespec.

  state(statespec=None)

    Modify or inquire widget state. If statespec is specified, sets the widget state according to it and return a new statespec indicating which flags were changed. If statespec is not specified, returns the currently enabled state flags.

  statespec зазвичай буде списком або кортежем.

## Комбінований список

Віджет `ttk.Combobox` поєднує в собі текстове поле з розкривним списком значень. Цей віджет є підкласом `Entry`.

Окрім методів, успадкованих від `Widget`: `Widget.cget()`, `Widget.configure()`, `Widget.identify()`, `Widget.instate()` і `Widget.state()`, а також наступне, успадковане від `Entry`: `Entry.bbox()`, `Entry.delete()`, `Entry.icursor()`, `Entry.index()`, `Entry.insert()`, `Entry.selection()`, `Entry.xview()`, він має деякі інші методи, описані в `ttk.Combobox`.

### Опції

Цей віджет підтримує такі конкретні параметри:

Варіант | опис
--- | ---
експортний вибір | Логічне значення. Якщо встановлено, вибір віджета пов’язується з диспетчером вікон (який можна повернути, наприклад, викликом Misc.selection_get).
виправдати | Визначає спосіб вирівнювання тексту у віджеті. Один із «лівих», «центральних» або «правих».
висота | Визначає висоту розкривного списку в рядках.
посткоманд | Сценарій (можливо, зареєстрований у Misc.register), який викликається безпосередньо перед відображенням значень. Він може вказувати, які значення відображати.
стан | Один із варіантів: «звичайний», «лише для читання» або «відключений». У стані «лише читання» значення не можна редагувати безпосередньо, і користувач може лише вибрати значення зі спадного списку. У «нормальному» стані текстове поле можна редагувати безпосередньо. У стані «вимкнено» взаємодія неможлива.
текстова змінна | Визначає ім’я, значення якого пов’язане зі значенням віджета. Щоразу, коли змінюється значення, пов’язане з цією назвою, значення віджета оновлюється, і навпаки. Див. `tkinter.StringVar`.
значення | Визначає список значень для відображення у розкривному списку.
ширина | Визначає ціле число, що вказує бажану ширину вікна введення, у середніх символах шрифту віджета.

### Віртуальні події

Віджети зі списком генерують віртуальну подію <<ComboboxSelected>>, коли користувач вибирає елемент зі списку значень.

### ttk.Combobox

class tkinter.ttk.Combobox
  current(newindex=None)

    Якщо вказано newindex, встановлює значення поля зі списком на позицію елемента newindex. В іншому випадку повертає індекс поточного значення або -1, якщо поточного значення немає в списку значень.

  get()

    Повертає поточне значення поля зі списком.

  set(value)

    Встановлює для поля зі списком значення value.

## Spinbox

Віджет `ttk.Spinbox` — це `ttk.Entry`, доповнений стрілками збільшення та зменшення. Його можна використовувати для чисел або списків рядкових значень. Цей віджет є підкласом `Entry`.

Окрім методів, успадкованих від `Widget`: `Widget.cget()`, `Widget.configure()`, `Widget.identify()`, `Widget.instate()` і `Widget.state()` і наступне, успадковане від `Entry`: `Entry.bbox()`, `Entry.delete()`, `Entry.icursor()`, `Entry.index()`, `Entry.insert()`, `Entry.xview()`, він має деякі інші методи, описані в `ttk.Spinbox`.

### Опції

Цей віджет підтримує такі конкретні параметри:

Варіант | опис
--- | ---
від | Плаваюче значення. Якщо встановлено, це мінімальне значення, до якого зменшуватиметься кнопка зменшення. Має бути написано як `from_`, коли використовується як аргумент, оскільки `from` є ключовим словом Python.
до | Плаваюче значення. Якщо встановлено, це максимальне значення, до якого збільшиться кнопка збільшення.
приріст | Плаваюче значення. Визначає величину, на яку кнопки збільшення/зменшення змінюють значення. За замовчуванням 1.0.
значення | Послідовність рядкових чи плаваючих значень. Якщо вказано, кнопки збільшення/зменшення перемикатимуть елементи в цій послідовності, а не збільшуватимуть чи зменшуватимуть числа.
загорнути | Логічне значення. Якщо `True`, кнопки збільшення та зменшення циклічно переключатимуться від значення `до` до значення `від` або значення `від` до значення `до` відповідно.
формат | Рядкове значення. Це визначає формат чисел, встановлений кнопками збільшення/зменшення. Він має бути у формі «%W.Pf», де W — доповнена ширина значення, P — точність, а «%» і «f» — літерали.
команда | Можливість виклику Python. Викликатиметься без аргументів щоразу, коли натиснуто одну з кнопок збільшення чи зменшення.

### Віртуальні події

Віджет Spinbox генерує віртуальну подію <<Increment>>, коли користувач натискає <Up> , і віртуальну подію <<Decrement>>, коли користувач натискає <Down> .

### ttk.Spinbox

class tkinter.ttk.Spinbox
  get()

    Повертає поточне значення поля обертання.

  set(value)

    Встановлює для поля обертання значення value.

## Ноутбук

Ttk Notebook widget manages a collection of windows and displays a single one at a time. Each child window is associated with a tab, which the user may select to change the currently displayed window.

### Опції

Цей віджет підтримує такі конкретні параметри:

Варіант | опис
--- | ---
висота | Якщо присутнє та більше нуля, визначає бажану висоту області панелі (не враховуючи внутрішні відступи чи вкладки). В іншому випадку використовується максимальна висота всіх панелей.
оббивка | Визначає обсяг додаткового простору, який потрібно додати навколо зовнішньої сторони блокнота. Відступ — це список до чотирьох специфікацій довжини зліва зверху справа знизу. Якщо вказано менше чотирьох елементів, нижній за замовчуванням — верхній, правий — лівий, верхній — лівий.
ширина | Якщо присутня та більша за нуль, указується бажана ширина області панелі (не враховуючи внутрішні відступи). В іншому випадку використовується максимальна ширина всіх панелей.

### Параметри вкладки

Існують також спеціальні параметри для вкладок:

Варіант | опис
--- | ---
стан | Або «нормальний», «відключений» або «прихований». Якщо «вимкнуто», вкладка не доступна для вибору. Якщо «приховано», вкладка не відображається.
липкий | Визначає, як дочірнє вікно розташовується в області панелі. Значення - це рядок, що містить нуль або більше символів «n», «s», «e» або «w». Кожна літера вказує на сторону (північ, південь, схід або захід), якої дочірнє вікно дотримуватиметься відповідно до менеджера геометрії `grid()`.
оббивка | Визначає обсяг додаткового простору, який потрібно додати між блокнотом і цією панеллю. Синтаксис такий самий, як і для параметра padding, який використовується цим віджетом.
текст | Визначає текст для відображення на вкладці.
зображення | Визначає зображення для відображення на вкладці. Перегляньте зображення опції, описане у `Widget`.
з’єднання | Визначає спосіб відображення зображення відносно тексту, якщо присутні обидва параметри – текст і зображення. Перегляньте Label Options для правових значень.
підкреслити | Визначає індекс (від нуля) символу, який потрібно підкреслити в текстовому рядку. Підкреслений символ використовується для мнемонічної активації, якщо викликається `Notebook.enable_traversal()`.

### Ідентифікатори вкладок

Tab_id, присутній у кількох методах `ttk.Notebook`, може мати будь-яку з наступних форм:

- Ціле число від нуля до кількості вкладок

- Ім’я дочірнього вікна

- Позиційна специфікація у формі «@x,y», яка ідентифікує вкладку

- The literal string «current», which identifies the currently selected tab

- Рядок літералу «end», який повертає кількість вкладок (дійсно лише для `Notebook.index()`)

### Віртуальні події

Цей віджет генерує віртуальну подію <<NotebookTabChanged>> після вибору нової вкладки.

### ттк.Зошит

class tkinter.ttk.Notebook
  add(child, **kw)

    Додає нову вкладку до блокнота.

    Якщо вікно наразі керується блокнотом, але приховано, воно повертається до попереднього положення.

    Перегляньте Параметри вкладки (Tab Options), щоб переглянути список доступних параметрів.

  forget(tab_id)

    Видаляє вкладку, визначену tab_id, скасовує відповідне вікно та скасовує керування ним.

  hide(tab_id)

    Приховує вкладку, визначену tab_id.

    Вкладка не відображатиметься, але пов’язане вікно й надалі керуватиметься ноутбуком, а його конфігурація буде збережена. Приховані вкладки можна відновити за допомогою команди `add()`.

  identify(x, y)

    Повертає назву елемента вкладки в позиції x, y або порожній рядок, якщо його немає.

  index(tab_id)

    Повертає числовий індекс вкладки, визначеної tab_id, або загальну кількість вкладок, якщо tab_id є рядком «end».

  insert(pos, child, **kw)

    Вставляє панель у вказане місце.

    pos — це рядок «end», цілочисельний індекс або ім’я керованого дочірнього елемента. Якщо child вже керується блокнотом, переміщує його у вказане положення.

    Перегляньте Параметри вкладки (Tab Options), щоб переглянути список доступних параметрів.

  select(tab_id=None)

    Вибирає вказаний tab_id.

    The associated child window will be displayed, and the previously selected window (if different) is unmapped. If tab_id is omitted, returns the widget name of the currently selected pane.

  tab(tab_id, option=None, **kw)

    Запитайте або змініть параметри конкретного tab_id.

    Якщо kw не вказано, повертає словник значень параметрів вкладки. Якщо вказано option, повертає значення цього option. В іншому випадку встановіть параметрам відповідні значення.

  tabs()

    Повертає список вікон, якими керує блокнот.

  enable_traversal()

    Увімкнути обхід клавіатури для вікна верхнього рівня, що містить цей блокнот.

    Це розширить прив’язки для вікна верхнього рівня, що містить блокнот, наступним чином:

    - `Control`-`Tab`: вибирає вкладку, наступну за поточною.

    - `Shift`-`Control`-`Tab`: вибирає вкладку, що передує поточній вибраній.

    - `Alt`-`K`: де K — мнемонічний (підкреслений) символ будь-якої вкладки, вибере цю вкладку.

    Кілька блокнотів на одному верхньому рівні можуть бути активовані для обходу, включаючи вкладені блокноти. Однак обхід блокнота працює належним чином, лише якщо на всіх панелях є блокнот, у якому вони знаходяться, як головний.

## Індикатор виконання

Віджет `ttk.Progressbar` показує статус тривалої операції. Він може працювати в двох режимах: 1) визначений режим, який показує обсяг виконаної роботи по відношенню до загального обсягу роботи, яку потрібно виконати, і 2) невизначений режим, який забезпечує анімований дисплей, щоб повідомити користувачеві, що робота просувається.

### Опції

Цей віджет підтримує такі конкретні параметри:

Варіант | опис
--- | ---
схід | Один із «горизонтальних» або «вертикальних». Визначає орієнтацію індикатора виконання.
довжина | Визначає довжину довгої осі індикатора перебігу (ширина, якщо горизонтальна, висота, якщо вертикальна).
режим | Один із «визначених» або «невизначених».
максимум | Число, що визначає максимальне значення. За замовчуванням 100.
значення | Поточне значення індикатора виконання. У «визначеному» режимі це означає обсяг виконаної роботи. У «невизначеному» режимі воно інтерпретується як максимум за модулем; тобто індикатор прогресу завершує один «цикл», коли його значення збільшується на максимум.
змінна | Ім’я, пов’язане зі значенням опції. Якщо вказано, значення індикатора виконання автоматично встановлюється на значення цього імені щоразу, коли останнє змінюється.
фаза | Опція лише для читання. Віджет періодично збільшує значення цього параметра щоразу, коли його значення перевищує 0, а в режимі визначення менше максимального. Цей параметр може використовуватися поточною темою для надання додаткових ефектів анімації.

### ttk.Прогрессбар

class tkinter.ttk.Progressbar
  start(interval=None)

    Почати режим автоінкременту: планує повторювану подію таймера, яка викликає `Progressbar.step()` кожні інтервал мілісекунд. Якщо опущено, інтервал за замовчуванням становить 50 мілісекунд.

  step(amount=None)

    Збільшує значення індикатора виконання на кількість.

    кількість за замовчуванням дорівнює 1,0, якщо опущено.

  stop()

    Зупинити режим автозбільшення: скасовує будь-яку повторювану подію таймера, ініційовану `Progressbar.start()` для цього рядка виконання.

## Роздільник

Віджет `ttk.Separator` відображає горизонтальну або вертикальну роздільну панель.

Він не має інших методів, крім успадкованих від `ttk.Widget`.

### Опції

Цей віджет підтримує такі конкретні параметри:

Варіант | опис
--- | ---
схід | Один із «горизонтальних» або «вертикальних». Визначає орієнтацію роздільника.

## Sizegrip

Віджет `ttk.Sizegrip` (також відомий як вікно зростання) дозволяє користувачеві змінювати розмір вікна верхнього рівня, натискаючи та перетягуючи ручку.

Цей віджет не має ані спеціальних параметрів, ані спеціальних методів, окрім успадкованих від `ttk.Widget`.

### Примітки щодо платформи

- У macOS вікна верхнього рівня автоматично містять вбудовану ручку розміру за замовчуванням. Додавання `Sizegrip` нешкідливо, оскільки вбудована рукоятка лише маскує віджет.

### помилки

- Якщо положення верхнього рівня вмісту було вказано відносно правого або нижнього краю екрана (наприклад, …), віджет `Sizegrip` не змінюватиме розмір вікна.

- Цей віджет підтримує зміну розміру лише на «південний схід».

## Treeview

Віджет `ttk.Treeview` відображає ієрархічну колекцію елементів. Кожен елемент має текстову позначку, необов’язкове зображення та необов’язковий список значень даних. Значення даних відображаються в послідовних стовпцях після мітки дерева.

Порядок, у якому відображаються значення даних, можна контролювати за допомогою параметра віджета `displaycolumns`. Віджет дерева також може відображати заголовки стовпців. Доступ до стовпців можна отримати за номерами або символьними іменами, указаними в стовпцях параметрів віджета. Перегляньте Ідентифікатори стовпців (Column Identifiers).

Кожен елемент ідентифікується унікальною назвою. Віджет генеруватиме ідентифікатори елементів, якщо вони не надані абонентом. Існує виділений кореневий елемент під назвою `{}`. Сам кореневий елемент не відображається; його діти з’являються на верхньому рівні ієрархії.

Кожен елемент також має список тегів, які можна використовувати для пов’язування прив’язок подій до окремих елементів і керування зовнішнім виглядом елемента.

Віджет Treeview підтримує горизонтальне та вертикальне прокручування відповідно до параметрів, описаних у розділі Параметри прокручуваних віджетів, і методів `Treeview.xview()` і `Treeview.yview()`.

### Опції

Цей віджет підтримує такі конкретні параметри:

Варіант | опис
--- | ---
колонки | Список ідентифікаторів стовпців із зазначенням кількості стовпців та їхніх імен.
відображення стовпців | Список ідентифікаторів стовпців (символічних або цілочисельних індексів), що вказують, які стовпці даних відображаються та порядок, у якому вони з’являються, або рядок «#all».
висота | Визначає кількість рядків, які мають бути видимими. Примітка: необхідна ширина визначається із суми ширин стовпців.
оббивка | Визначає внутрішнє доповнення для віджета. Заповнення — це список із до чотирьох специфікацій довжини.
selectmode | Керує тим, як вбудовані зв’язки класів керують виділенням. Один із варіантів: «розширений», «перегляд» або «немає». Якщо встановлено значення «розширений» (за замовчуванням), можна вибрати кілька елементів. Якщо вибрати «перегляд», одночасно буде вибрано лише один елемент. Якщо «немає», вибір не буде змінено. Зауважте, що код програми та прив’язки тегів можуть налаштовувати вибір як завгодно, незалежно від значення цього параметра.
шоу | Список, що містить нуль або більше з наведених нижче значень, що визначає, які елементи дерева відображати. дерево: відображати мітки дерева в стовпці №0. заголовки: відображення рядка заголовка. Типовим є «заголовки дерева», тобто показувати всі елементи. Примітка: стовпець №0 завжди стосується стовпця дерева, навіть якщо show=»tree» не вказано.

### Параметри предмета

Наведені нижче параметри можна вказати для елементів у командах віджета вставки та елемента.

Варіант | опис
--- | ---
текст | Текстова мітка для відображення елемента.
зображення | Зображення Tk, що відображається ліворуч від мітки.
значення | Список значень, пов’язаних з елементом. Кожен елемент має мати таку ж кількість значень, як і стовпці параметрів віджета. Якщо значень менше, ніж стовпців, решта значень вважатиметься порожніми. Якщо значень більше, ніж стовпців, додаткові значення ігноруються.
ВІДЧИНЕНО | Значення `True`/`False`, що вказує, чи потрібно відображати або приховувати дочірні елементи елемента.
теги | Список тегів, пов’язаних із цим елементом.

### Параметри тегів

На тегах можуть бути вказані такі параметри:

Варіант | опис
--- | ---
передній план | Визначає колір переднього плану тексту.
фон | Визначає колір тла клітинки або елемента.
шрифт | Визначає шрифт для малювання тексту.
зображення | Визначає зображення елемента, якщо параметр зображення елемента порожній.

### Ідентифікатори стовпців

Ідентифікатори стовпців приймають будь-яку з таких форм:

- Символічне ім’я зі списку параметрів стовпців.

- Ціле число n, що визначає n-й стовпець даних.

- Рядок у формі #n, де n — ціле число, що визначає n-й стовпець відображення.

Примітки:

- Значення параметрів елемента можуть відображатися в іншому порядку, ніж порядок, у якому вони зберігаються.

- Стовпець #0 завжди відноситься до стовпця дерева, навіть якщо show=»tree» не вказано.

Номер стовпця даних є індексом у списку значень параметрів елемента; номер стовпця відображення — це номер стовпця в дереві, де відображаються значення. Мітки дерева відображаються у стовпці №0. Якщо параметр displaycolumns не встановлено, стовпець даних n відображається в стовпці #n+1. Знову ж таки, стовпець №0 завжди відноситься до стовпця дерева.

### Віртуальні події

Віджет Treeview генерує такі віртуальні події.

Подія | опис
--- | ---
<<TreeviewSelect>> | Генерується кожного разу, коли вибір змінюється.
<<TreeviewOpen>> | Створено безпосередньо перед налаштуванням елемента фокусу для відкриття=True.
<<TreeviewClose>> | Згенеровано одразу після встановлення для елемента фокусу значення open=False.

Методи `Treeview.focus()` і `Treeview.selection()` можна використовувати для визначення постраждалого елемента або елементів.

### ttk.Treeview

class tkinter.ttk.Treeview
  bbox(item, column=None)

    Повертає обмежувальну рамку (відносно вікна віджета перегляду дерева) зазначеного елемента у формі (x, y, ширина, висота).

    Якщо вказано стовпець, повертає обмежувальну рамку цієї клітинки. Якщо елемент невидимий (тобто якщо він є нащадком закритого елемента або прокручується поза екраном), повертає порожній рядок.

  get_children(item=None)

    Повертає список дітей, що належать до item.

    Якщо item не вказано, повертає кореневих дітей.

  set_children(item, *newchildren)

    Замінює дочірній елемент item на newchildren.

    Діти, присутні в item, яких немає в newchilders, від’єднуються від дерева. Жоден елемент у newchildren не може бути предком item. Зауважте, що якщо не вказати newchilders, дочірні елементи item будуть від’єднані.

  column(column, option=None, **kw)

    Запитайте або змініть параметри для вказаного стовпця.

    Якщо kw не вказано, повертає dict значень параметрів стовпця. Якщо вказано опцію, повертається значення для цієї опції. В іншому випадку встановіть параметрам відповідні значення.

    Допустимі параметри/значення:

    id

      Повертає назву стовпця. Це опція лише для читання.

    anchor: One of the standard Tk anchor values.

      Визначає, як має бути вирівняний текст у цьому стовпці відносно клітинки.

    minwidth: width

      Мінімальна ширина стовпця в пікселях. Віджет перегляду дерева не зробить стовпець меншим, ніж визначено цією опцією, коли розмір віджета змінюється або користувач перетягує стовпець.

    stretch: `True`/`False`

      Визначає, чи слід регулювати ширину стовпця під час зміни розміру віджета.

    width: width

      Ширина стовпця в пікселях.

    Щоб налаштувати стовпець дерева, викличте його за допомогою column = «#0»

  delete(*items)

    Видалити всі вказані елементи та всіх їхніх нащадків.

    Кореневий елемент не можна видалити.

  detach(*items)

    Від’єднує всі вказані елементи від дерева.

    Елементи та всі їхні нащадки все ще присутні та можуть бути повторно вставлені в іншу точку дерева, але не відображатимуться.

    Кореневий елемент не можна від’єднувати.

  exists(item)

    Повертає `True`, якщо вказаний елемент присутній у дереві.

  focus(item=None)

    Якщо вказано item, встановлює елемент фокуса на item. В іншому випадку повертає поточний елемент фокусу або „“, якщо його немає.

  heading(column, option=None, **kw)

    Запитайте або змініть параметри заголовка для вказаного стовпця.

    Якщо kw не вказано, повертає dict значень опції заголовка. Якщо вказано параметр, повертається значення для цього параметра. В іншому випадку встановіть параметрам відповідні значення.

    Допустимі параметри/значення:

    text: text

      Текст для відображення в заголовку стовпця.

    image: imageName

      Визначає зображення, яке відображатиметься праворуч від заголовка стовпця.

    anchor: anchor

      Визначає, як має бути вирівняний текст заголовка. Одне зі стандартних значень прив’язки Tk.

    command: callback

      Зворотний виклик, що викликається, коли натискається мітка заголовка.

    Щоб налаштувати заголовок стовпця дерева, викличте його за допомогою column = «#0».

  identify(component, x, y)

    Повертає опис зазначеного компонента під точкою, заданою x та y, або порожній рядок, якщо такого компонента немає в цій позиції.

  identify_row(y)

    Повертає ідентифікатор елемента в позиції y.

  identify_column(x)

    Повертає ідентифікатор стовпця даних клітинки в позиції x.

    Стовпець дерева має ID #0.

  identify_region(x, y)

    Повертає одне з:

    область | значення
    --- | ---
    заголовок | Область заголовка дерева.
    сепаратор | Пробіл між заголовками двох стовпців.
    дерево | Зона дерев.
    клітина | Комірка даних.

    Наявність: Tk 8.6.

  identify_element(x, y)

    Повертає елемент у позиції x, y.

    Наявність: Tk 8.6.

  index(item)

    Повертає цілочисельний індекс item у батьківському списку дочірніх елементів.

  insert(parent, index, iid=None, **kw)

    Створює новий елемент і повертає ідентифікатор елемента щойно створеного елемента.

    parent — це ідентифікатор елемента батьківського елемента або порожній рядок для створення нового елемента верхнього рівня. index — це ціле число або значення «end», що вказує, куди в списку дочірніх елементів потрібно вставити новий елемент. Якщо index менше або дорівнює нулю, новий вузол вставляється на початку; якщо index більше або дорівнює поточній кількості дітей, він вставляється в кінці. Якщо вказано iid, він використовується як ідентифікатор елемента; iid не повинен існувати в дереві. В іншому випадку генерується новий унікальний ідентифікатор.

    See Item Options for the list of available options.

  item(item, option=None, **kw)

    Запитайте або змініть параметри для вказаного елементу.

    Якщо параметри не задано, повертається dict із параметрами/значеннями для елемента. Якщо вказано параметр, повертається значення для цього параметра. В іншому випадку встановлює параметри на відповідні значення, задані kw.

  move(item, parent, index)

    Переміщує item на позицію index у списку дочірніх елементів батька.

    Незаконно переміщувати елемент під одним із його нащадків. Якщо index менше або дорівнює нулю, item переміщується на початок; якщо більше або дорівнює кількості дітей, воно переміщується в кінець. Якщо елемент був від’єднаний, він знову приєднується.

  next(item)

    Повертає ідентифікатор наступного брата item або „“, якщо item є останнім дочірнім елементом свого батька.

  parent(item)

    Повертає ідентифікатор батьківського елемента item або „“, якщо item знаходиться на верхньому рівні ієрархії.

  prev(item)

    Повертає ідентифікатор попереднього брата item або „“, якщо item є першим дочірнім елементом свого батька.

  reattach(item, parent, index)

    Псевдонім для `Treeview.move()`.

  see(item)

    Переконайтеся, що елемент видно.

    Встановлює параметр відкриття всіх предків item на `True` і прокручує віджет, якщо необхідно, щоб item знаходився у видимій частині дерева.

  selection()

    Повертає кортеж вибраних елементів.

    Змінено в версії 3.8: `selection()` більше не приймає аргументи. Для зміни стану вибору використовуйте наступні методи вибору.

  selection_set(*items)

    предмети стають новим вибором.

    Змінено в версії 3.6: items можна передавати як окремі аргументи, а не просто як один кортеж.

  selection_add(*items)

    Додайте предмети до вибору.

    Змінено в версії 3.6: items можна передавати як окремі аргументи, а не просто як один кортеж.

  selection_remove(*items)

    Видалити предмети з вибору.

    Змінено в версії 3.6: items можна передавати як окремі аргументи, а не просто як один кортеж.

  selection_toggle(*items)

    Перемикайте стан вибору кожного елемента в items.

    Змінено в версії 3.6: items можна передавати як окремі аргументи, а не просто як один кортеж.

  set(item, column=None, value=None)

    З одним аргументом повертає словник пар стовпець/значення для вказаного елемента. З двома аргументами повертає поточне значення вказаного стовпця. З трьома аргументами встановлює значення заданого стовпця в заданому елементі на вказане значення.

  tag_bind(tagname, sequence=None, callback=None)

    Прив’яжіть зворотний виклик для даної послідовності події до тегу tagname. Коли подія доставляється до елемента, викликаються зворотні виклики для кожного параметра тегів елемента.

  tag_configure(tagname, option=None, **kw)

    Запитайте або змініть параметри для вказаного тегу.

    Якщо kw не вказано, повертає dict налаштувань опції для tagname. Якщо вказано опцію, повертає значення цієї опції для вказаного тегу. В іншому випадку встановлює параметри на відповідні значення для даного тегу.

  tag_has(tagname, item=None)

    Якщо вказано item, повертає 1 або 0 залежно від того, чи має вказаний item заданий тег. В іншому випадку повертає список усіх елементів, які мають вказаний тег.

    Наявність: Tk 8.6

  xview(*args)

    Запитайте або змініть горизонтальне положення дерева.

  yview(*args)

    Запитайте або змініть вертикальне положення дерева.

## Ttk Стайлінг

Кожному віджету в `ttk` призначається стиль, який визначає набір елементів, що входять до складу віджета, і те, як вони впорядковані, а також динамічні параметри та налаштування за замовчуванням для параметрів елемента. За замовчуванням ім’я стилю збігається з ім’ям класу віджета, але його може замінити параметр стилю віджета. Якщо ви не знаєте назву класу віджета, скористайтеся методом `Misc.winfo_class()` (somewidget.winfo_class()).

Дивись також

Tcl’2004 conference presentation

  У цьому документі пояснюється, як працює тематичний механізм

class tkinter.ttk.Style

  Цей клас використовується для роботи з базою даних стилів.

  configure(style, query_opt=None, **kw)

    Запитайте або встановіть значення за замовчуванням для вказаних параметрів у стилі.

    Кожен ключ у kw є опцією, а кожне значення є рядком, що визначає значення цієї опції.

    Наприклад, щоб змінити кожну кнопку за замовчуванням на плоску кнопку з відступом і іншим кольором фону:

        from tkinter import ttk
        import tkinter

        root = tkinter.Tk()

        ttk.Style().configure("TButton", padding=6, relief="flat",
           background="#ccc")

        btn = ttk.Button(text="Sample")
        btn.pack()

        root.mainloop()

  map(style, query_opt=None, **kw)

    Запит або встановлення динамічних значень указаних параметрів у стилі.

    Кожен ключ у kw є опцією, і кожне значення має бути списком або кортежем (зазвичай), що містить специфікації станів, згруповані в кортежі, списки або інші параметри. Специфікація стану — це сукупність одного чи кількох станів, а потім значення.

    Приклад може зробити це більш зрозумілим:

        import tkinter
        from tkinter import ttk

        root = tkinter.Tk()

        style = ttk.Style()
        style.map("C.TButton",
            foreground=[('pressed', 'red'), ('active', 'blue')],
            background=[('pressed', '!disabled', 'black'), ('active', 'white')]
            )

        colored_btn = ttk.Button(text="Test", style="C.TButton").pack()

        root.mainloop()

    Зауважте, що порядок послідовностей (станів, значень) для опції має значення, якщо порядок змінено на `[('активний', 'синій'), ('натиснутий', 'червоний')]` у опція переднього плану, наприклад, результатом буде синій передній план, коли віджет буде активним або натиснутим.

  lookup(style, option, state=None, default=None)

    Повертає значення, указане для option у style.

    Якщо вказано state, очікується, що це буде послідовність з одного або кількох станів. Якщо встановлено аргумент за замовчуванням, він використовується як резервне значення, якщо не знайдено специфікації параметра.

    Щоб перевірити, який шрифт кнопка використовує за замовчуванням:

        from tkinter import ttk

        print(ttk.Style().lookup("TButton", "font"))

  layout(style, layoutspec=None)

    Визначте макет віджета для даного стилю. Якщо layoutspec пропущено, повертається специфікація макета для заданого стилю.

    layoutspec, якщо вказано, має бути списком або іншим типом послідовності (за винятком рядків), де кожен елемент має бути кортежем, а перший елемент — це ім’я макета, а другий — мати формат, описаний у розділі Layouts.

    Щоб зрозуміти формат, перегляньте наведений нижче приклад (він не має на меті зробити щось корисне):

        from tkinter import ttk
        import tkinter

        root = tkinter.Tk()

        style = ttk.Style()
        style.layout("TMenubutton", [
           ("Menubutton.background", None),
           ("Menubutton.button", {"children":
               [("Menubutton.focus", {"children":
                   [("Menubutton.padding", {"children":
                       [("Menubutton.label", {"side": "left", "expand": 1})]
                   })]
               })]
           }),
        ])

        mbtn = ttk.Menubutton(text='Text')
        mbtn.pack()
        root.mainloop()

  element_create(elementname, etype, *args, **kw)

    Create a new element in the current theme, of the given etype which is expected to be either «image», «from» or «vsapi». The latter is only available in Tk 8.6 on Windows.

    Якщо використовується «image», args має містити назву зображення за замовчуванням, за якою слідують пари стану/значення (це специфікація зображення), а kw може мати такі параметри:

    border=padding

      padding — це список із чотирьох цілих чисел, які визначають ліву, верхню, праву та нижню межі відповідно.

    висота=висота

      Визначає мінімальну висоту елемента. Якщо значення менше нуля, за замовчуванням використовується висота базового зображення.

    padding=заповнення

      Визначає внутрішнє доповнення елемента. За умовчанням використовується значення рамки, якщо не вказано.

    sticky=спец

      Визначає, як зображення розміщується в кінцевій посилці. spec містить нуль або більше символів «n», «s», «w» або «e».

    ширина=ширина

      Визначає мінімальну ширину для елемента. Якщо значення менше нуля, за замовчуванням використовується ширина базового зображення.

    Приклад:

        img1 = tkinter.PhotoImage(master=root, file='button.png')
        img1 = tkinter.PhotoImage(master=root, file='button-pressed.png')
        img1 = tkinter.PhotoImage(master=root, file='button-active.png')
        style = ttk.Style(root)
        style.element_create('Button.button', 'image',
                             img1, ('pressed', img2), ('active', img3),
                             border=(2, 4), sticky='we')

    Якщо «from» використовується як значення etype, `element_create()` клонує існуючий елемент. Очікується, що args міститиме ім’я теми, з якої буде клоновано елемент, і, за бажанням, елемент для клонування. Якщо цей елемент для клонування не вказано, буде використано порожній елемент. kw відкидається.

    Приклад:

        style = ttk.Style(root)
        style.element_create('plain.background', 'from', 'default')

    If «vsapi» is used as the value of etype, `element_create()` will create a new element in the current theme whose visual appearance is drawn using the Microsoft Visual Styles API which is responsible for the themed styles on Windows XP and Vista. args is expected to contain the Visual Styles class and part as given in the Microsoft documentation followed by an optional sequence of tuples of ttk states and the corresponding Visual Styles API state value. kw may have the following options:

    padding=заповнення

      Specify the element’s interior padding. padding is a list of up to four integers specifying the left, top, right and bottom padding quantities respectively. If fewer than four elements are specified, bottom defaults to top, right defaults to left, and top defaults to left. In other words, a list of three numbers specify the left, vertical, and right padding; a list of two numbers specify the horizontal and the vertical padding; a single number specifies the same padding all the way around the widget. This option may not be mixed with any other options.

    margins=padding

      Specifies the elements exterior padding. padding is a list of up to four integers specifying the left, top, right and bottom padding quantities respectively. This option may not be mixed with any other options.

    ширина=ширина

      Specifies the width for the element. If this option is set then the Visual Styles API will not be queried for the recommended size or the part. If this option is set then height should also be set. The width and height options cannot be mixed with the padding or margins options.

    висота=висота

      Specifies the height of the element. See the comments for width.

    Приклад:

        style = ttk.Style(root)
        style.element_create('pin', 'vsapi', 'EXPLORERBAR', 3, [
                             ('pressed', '!selected', 3),
                             ('active', '!selected', 2),
                             ('pressed', 'selected', 6),
                             ('active', 'selected', 5),
                             ('selected', 4),
                             ('', 1)])
        style.layout('Explorer.Pin',
                     [('Explorer.Pin.pin', {'sticky': 'news'})])
        pin = ttk.Checkbutton(style='Explorer.Pin')
        pin.pack(expand=True, fill='both')

    Змінено в версії 3.13: Added support of the «vsapi» element factory.

  element_names()

    Повертає список елементів, визначених у поточній темі.

  element_options(elementname)

    Повертає список параметрів elementname.

  theme_create(themename, parent=None, settings=None)

    Створіть нову тему.

    Це помилка, якщо themenaname вже існує. Якщо вказано parent, нова тема успадкує стилі, елементи та макети від батьківської теми. Якщо присутні параметри, очікується, що вони матимуть той самий синтаксис, який використовується для `theme_settings()`.

  theme_settings(themename, settings)

    Тимчасово встановлює поточну тему на themenaname, застосовує вказані налаштування, а потім відновлює попередню тему.

    Кожен ключ у settings є стилем, і кожне значення може містити ключі „configure“, „map“, „layout“ і „element create“, і очікується, що вони матимуть той самий формат, який визначено методами `Style.configure()`, `Style.map()`, `Style.layout()` і `Style.element_create()` відповідно.

    Як приклад, давайте трохи змінимо Combobox для теми за замовчуванням:

        from tkinter import ttk
        import tkinter

        root = tkinter.Tk()

        style = ttk.Style()
        style.theme_settings("default", {
           "TCombobox": {
               "configure": {"padding": 5},
               "map": {
                   "background": [("active", "green2"),
                                  ("!disabled", "green4")],
                   "fieldbackground": [("!disabled", "green3")],
                   "foreground": [("focus", "OliveDrab1"),
                                  ("!disabled", "OliveDrab2")]
               }
           }
        })

        combo = ttk.Combobox().pack()

        root.mainloop()

  theme_names()

    Повертає список усіх відомих тем.

  theme_use(themename=None)

    Якщо themename не вказано, повертає тему, що використовується. В іншому випадку встановлює поточну тему на themenaname, оновлює всі віджети та видає подію <<ThemeChanged>>.

### Макети

A layout can be just `None`, if it takes no options, or a dict of options specifying how to arrange the element. The layout mechanism uses a simplified version of the pack geometry manager: given an initial cavity, each element is allocated a parcel.

Допустимі параметри/значення:

side: whichside

  Визначає, з якого боку порожнини розмістити елемент; зверху, справа, знизу або зліва. Якщо опущено, елемент займає всю порожнину.

sticky: nswe

  Визначає місце розміщення елемента всередині його виділеної ділянки.

unit: 0 or 1

  Якщо встановлено значення 1, елемент і всі його нащадки розглядатимуться як єдиний елемент для цілей `Widget.identify()` та ін. Він використовується для таких речей, як смуги прокрутки з ручками.

children: [sublayout… ]

  Визначає список елементів для розміщення всередині елемента. Кожен елемент — це кортеж (або інший тип послідовності), де перший елемент — це назва макета, а інший — Layout.