我对 ttk 中的样式如何工作有点困惑。我尝试创建一个具有自定义默认样式的小部件,但它不起作用。
我创建了 ttk.style 对象我自己的按钮类,并以 ttk.Button 作为父级:
defstyle = ttk.Style() defstyle.configure('Main.TButton', 背景 = '红色', 前景 = '蓝色')
类按钮(ttk.Button): def init(self, *args, **kwargs): super().init(*args, **kwargs)
我想将 defstyle 样式设置为默认样式,因此按钮将以这种方式设置样式,而无需隐式输入 (...style='Main.TButton') 选项。我尝试做
类按钮(ttk.Button): def init(self, style, *args, **kwargs): super().init(*args, **kwargs) self.style = 'Main.TButton'
但是没有成功。我该怎么办?
要使用 ttk 实现自定义按钮类的默认样式,您需要为类的实例设置默认样式。您可以通过重写自定义按钮类的 init 方法来完成此操作。您可以通过以下方式修改代码来实现此目的:
import tkinter as tk
from tkinter import ttk
defstyle = ttk.Style()
defstyle.configure('Main.TButton', background='red', foreground='blue')
class Button(ttk.Button):
def __init__(self, *args, **kwargs):
style = kwargs.pop('style', 'Main.TButton') # Remove 'style' from kwargs and use default 'Main.TButton' if not provided
super().__init__(*args, style=style, **kwargs)
# Example usage:
root = tk.Tk()
button1 = Button(root, text='Button 1')
button1.pack()
button2 = Button(root, text='Button 2', style='Main.TButton') # Explicitly specifying style
button2.pack()
root.mainloop()