Как использовать метод 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()
В этом примере, когда вы перемещаете фокус на кнопку, цвет ее текста меняется на красный. А когда вы щелкаете или нажимаете кнопку, цвет ее текста становится синим.
Выход: