Проблема с стилями 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()

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка