Как настроить map для всех виджетов ttk, кроме TButton?

#python #tkinter #tk #ttk

#python #tkinter #tk #ttk

Вопрос:

Я создаю графический интерфейс с помощью Tkinter и ttk и пытаюсь создать пользовательский map интерфейс, чтобы сделать виджеты ttk синими при наведении курсора мыши. Я мог бы применить это ко всем виджетам, передав "." в качестве первого аргумента ttk.Style().map(...) .

 import tkinter as tk
import tkinter.ttk as ttk


root = tk.Tk()

style = ttk.Style()
style.map(".", background=[("active", "blue")])

button = ttk.Button(root, text="An example button")
button.pack()
scrollbar = ttk.Scrollbar(root)
scrollbar.pack()

root.mainloop()
 

Но теперь я хочу исключить TButton из этого запроса. То есть мне нужно сделать все виджеты, кроме TButton синего, при наведении курсора мыши. Как я могу это сделать?

Передача «.!TButton» а также «!TButton» вместо «.» не имеет никакого эффекта.

Комментарии:

1. Вы могли бы style.map('TButton',background=[('active','#f0f0f0')]) сделать так, чтобы это переопределяло другое сопоставление

2. @CoolCloud, большое вам спасибо 🙂 Почему-то я не думал о переопределении сопоставления. Хотите добавить свой комментарий в качестве ответа?

Ответ №1:

Существует корневой стиль, имя которого ‘.’. Чтобы изменить внешний вид некоторой функции по умолчанию для каждого виджета, вы можете настроить этот стиль. Например, предположим, что вы хотите, чтобы весь текст был 12-точечным Helvetica (если не переопределен другим стилем или параметром шрифта).

Таким образом, мы можем переопределить его, просто добавив другой стиль:

 style.map('TButton',background=[('active','#f0f0f0')])
 

Имейте в виду, что вы можете захотеть сделать это для каждого стиля, который вы хотите установить по умолчанию.

Прочитайте здесь для получения дополнительной информации.

Комментарии:

1. Большое вам спасибо! 🙂