На этом шаге мы рассмотрим залание и использование таких стилей.
Можно указать отдельный стиль для каждого из состояний, поддерживаемых компонентом, создав тем самым стиль состояния. Например, мы можем задать отдельный стиль для состояния, когда компонент недоступен, и стиль для состояния, когда он имеет фокус ввода.
Для создания стилей состояний применяется метод map() класса Style. Вызывается он так же, как метод configure(), рассмотренный на предыдущем шаге. Разница между двумя этими методами состоит в формате, в котором записываются значения опций стиля.
Значение каждой опции должно представлять собой список или кортеж, каждый элемент которого укажет состояние или набор состояний, в котором должен находиться компонент, и значение, которое опция примет в этом случае. Этот элемент также должен представлять собой список или кортеж:
Метод map() можно использовать в комбинации с методом configure(). Последний задаст стиль, определяющий для компонента оформление по умолчанию:
s = tkinter.ttk.Style() s.configure("TButton", foreground="blue") s.map("TButton", foreground=[("active", "red")])
В результате по умолчанию все кнопки будут иметь надписи синего цвета. Но при наведении курсора мыши на кнопку цвет ее надписи сменится на красный.
Мы можем использовать метод map() для получения значения заданной опции или сразу всех опций у стиля состояния:
# Получаем значение опции foreground print(s.map("TButton", query_opt="foreground")) # Результат: # [('active', 'red')] # Получаем значение всех опций стиля print(s.map("TButton")) # Результат: # {'foreground': [('active', 'red')]}
Для работы со стилями состояний также может пригодиться метод lookup() класса Style. Вот формат его вызова:
lookup(<Название стиля>, <Название опции>[, state=<Cocтояние>])
Первым параметром указывается название стиля, вторым - название опции, значение которой нужно получить.
Если параметр state не указан, метод вернет значение для опции, заданное по умолчанию: либо вызовом метода configure(), либо используемой темой. Чтобы получить значение опции для определенного состояния компонента, следует записать в параметре state кортеж из обозначений состояний, представленных строками:
# Получаем значение по умолчанию для опции foreground print(s.lookup("TButton", "foreground")) # Результат: blue # Получаем значение опции foreground для состояния active print(s.lookup("TButton", "foreground", state=("active",))) # Результат: red
Со следующего шага мы начнем рассматривать нестилизуемые компоненты.