Как использовать метод Ttk Style map() в Python

Рассмотрим, как использовать метод ttk Style map() в Python для динамического изменения внешнего вида виджета в зависимости от его конкретного состояния.

Как правило, виджет ttk позволяет изменять свой внешний вид в зависимости от определенного состояния.

В следующей таблице представлен список состояний виджета и их значения:

Состояние Значение
active В данный момент мышь находится внутри виджета.
alternate Ttk зарезервировал это состояние для использования приложениями.
background Виджет находится в окне, которое не является окном переднего плана. Окно переднего плана — это окно, которое получает пользовательский ввод. Это состояние относится только к Windows и macOS.
disabled Виджет не будет реагировать ни на какие действия.
focus Виджет в данный момент находится в фокусе.
invalid Значение виджета в данный момент недействительно.
pressed Виджет в данный момент нажат или щелкается, например, при нажатии виджета «Кнопка».
readonly Не позволяет изменять текущее значение, например, виджет «Ввод», доступный только для чтения, не позволит изменять его текстовое содержимое.
selected Виджет выбирается, например, когда отмечены переключатели.

Чтобы динамически изменить внешний вид виджета, можно использовать метод map() объекта Style:

style.map(style_name, query)

Метод map() принимает первый аргумент как style_name, например, TButton и TLabel.

Аргумент query представляет собой список ключевых аргументов, где каждый ключ представляет собой параметр стиля, а значения представляют собой списки кортежей(состояние, значение).

Например, следующий код динамически изменяет цвет переднего плана виджета button:

import tkinter as tk
from tkinter import ttk


class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.geometry('300x100')

        button = ttk.Button(self, text='Save')
        button.pack(expand=True)

        style = ttk.Style(self)
        style.configure('TButton', font=('Helvetica', 16))
        style.map('TButton',
                foreground=[('pressed', 'blue'),
                           ('active', 'red')])

        print(style.layout('TButton'))


if __name__ == "__main__":
    app = App()
    app.mainloop()

В этом примере, когда вы перемещаете фокус на кнопку, цвет ее текста меняется на красный. А когда вы щелкаете или нажимаете кнопку, цвет ее текста становится синим.

Выход:

Пример изменения цвета переднего плана виджета button

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *