Проблема с стилями Style на ttk
Почему при исполнении данного кода цвет кнопки не меняется при нажатии?
Стили вроде заданы правильно, я подозреваю, что проблема с наследованием, но я не уверен.
import tkinter as tk
from tkinter import ttk
class SubscribeButton(ttk.Button):
default_unsubbed_style = "Unsubbed"
default_subbed_style = "Subbed"
def __init__(self, master,
unsubbed_style=default_unsubbed_style,
subbed_style=default_subbed_style,
state=False, **options) -> None:
self.styles = [
f'{unsubbed_style}.TButton',
f'{subbed_style}.TButton'
]
self.labels = [
'Subscribe',
'Unsubscribe'
]
self.state = state
super().__init__(master,
style=self.styles[state],
text=self.labels[state],
command=self.change_state,
**options)
def change_state(self) -> None:
self.state = not self.state
self.config(text=self.labels[self.state],
style=self.styles[self.state])
class App(tk.Tk):
def __init__(self, tk_options={}, ui_options={}) -> None:
super().__init__(**tk_options)
self._initUI(**ui_options)
def _initUI(self, **ui_options) -> None:
self.btn = SubscribeButton(self)
self.btn.pack(fill=tk.BOTH, expand=True)
if __name__ == "__main__":
app = App()
unsubbed = ttk.Style()
unsubbed.configure(
'Unsubbed.TButton',
foreground="white",
font=('Arial', 30),
bgcolor='red'
)
subbed = ttk.Style()
subbed.configure(
'Subbed.TButton',
foreground="white",
font=('Arial', 30),
background='gray'
)
app.mainloop()
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте добавить, например:
unsubbed.theme_use('clam')
import tkinter as tk
from tkinter import ttk
class SubscribeButton(ttk.Button):
default_unsubbed_style = "Unsubbed"
default_subbed_style = "Subbed"
def __init__(self, master,
unsubbed_style=default_unsubbed_style,
subbed_style=default_subbed_style,
state=False, **options) -> None:
self.styles = [
f'{unsubbed_style}.TButton',
f'{subbed_style}.TButton'
]
self.labels = [
'Unsubscribe', # v
'Subscribe', # ^
]
self.state = state
super().__init__(master,
style=self.styles[state],
text=self.labels[state],
command=self.change_state,
**options)
def change_state(self) -> None:
self.state = not self.state
self.config(text=self.labels[self.state],
style=self.styles[self.state])
class App(tk.Tk):
def __init__(self, tk_options={}, ui_options={}) -> None:
super().__init__(**tk_options)
self._initUI(**ui_options)
def _initUI(self, **ui_options) -> None:
self.btn = SubscribeButton(self)
self.btn.pack(fill=tk.BOTH, expand=True)
if __name__ == "__main__":
app = App()
unsubbed = ttk.Style()
print(f'unsubbed.theme_use() = "{unsubbed.theme_use()}"') # !!!
unsubbed.theme_use('clam') # +++
unsubbed.configure(
'Unsubbed.TButton',
foreground="white",
font=('Arial', 30),
background='green',
)
subbed = ttk.Style()
subbed.configure(
'Subbed.TButton',
foreground="red",
font=('Arial', 30),
background='blue'
)
app.mainloop()

