Ttk 制作自己的默认样式

问题描述 投票:0回答:1

我对 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'

但是没有成功。我该怎么办?

python ttk ttkthemes
1个回答
0
投票

要使用 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()
在此代码中:
  • 我们重写 Button 类的 init 方法来接受样式参数。如果未提供样式,则默认为“Main.TButton”。
  • 然后,我们使用提供的参数调用父类 (ttk.Button) 的 init 方法,并将样式参数传递给它。
  • 创建 Button 实例时,您可以显式提供样式或依赖默认的“Main.TButton”样式。
© www.soinside.com 2019 - 2024. All rights reserved.