wxPython继承字体

wxPython继承字体,python,fonts,wxpython,Python,Fonts,Wxpython,如何避免为每个标签书写: static_text.SetFont(wx.Font(...)) static_text.SetForegroundColour(wx.Colour(...)) 而不是从父元素或其他东西继承字体?尝试类似的操作: class Label(wx.StaticText): def __init__(self, *args, **kwargs): wx.StaticText.__init__(self, *args, **kwargs)

如何避免为每个标签书写:

static_text.SetFont(wx.Font(...))
static_text.SetForegroundColour(wx.Colour(...))

而不是从父元素或其他东西继承字体?

尝试类似的操作:

class Label(wx.StaticText):
    def __init__(self, *args, **kwargs):
        wx.StaticText.__init__(self, *args, **kwargs)
        self.SetFont(wx.Font(...))
        self.SetForegroundColour(wx.Colout(...))
...
static_text = Label(...)

试试这样:

class Label(wx.StaticText):
    def __init__(self, *args, **kwargs):
        wx.StaticText.__init__(self, *args, **kwargs)
        self.SetFont(wx.Font(...))
        self.SetForegroundColour(wx.Colout(...))
...
static_text = Label(...)

如果更改父容器的字体,则会为其上的所有小部件获取该字体。例如,更改框架实例的字体时,静态文本和复选框中的字体会发生更改,而无需单独设置:


Afaik如果您想修改无法访问的现有代码来编写SetFont行,那么您需要在编写这些类时牢记这一点。最明显的事情是将字体设置在父类的
\uuuu init\uuuu
之外的方法中,以便在继承自受限访问类的类中覆盖该字体,如果更改父容器的字体,则为其上的所有小部件获取该字体。例如,更改框架实例的字体时,静态文本和复选框中的字体会发生更改,而无需单独设置:


Afaik如果您想修改无法访问的现有代码来编写SetFont行,那么您需要在编写这些类时牢记这一点。最明显的是在父类的
\uuuu init\uuu
之外的方法中设置字体,以便在继承自受限访问类的类中覆盖它

这是一个明显的解决方案,但是如果您需要处理现有的代码怎么办?@Halst您可以为父控件设置所需的字体,并且它将应用于所有子控件,因此不要调用标签的
SetFont
。如果这对您不起作用,请尝试为每个控件调用
InheritAttributes
方法。非常感谢您指向InheritAttributes。它可以工作,但是在我的例子中,它仍然需要在每个静态标签上调用。知道如何避免这种情况吗?@Halst如果没有看到您的代码,很难说为什么它不工作,但我猜您在创建子项时为父项设置了字体,要获得属性继承,必须在创建子控件之前设置字体属性。这是一个明显的解决方案,但如果需要处理现有代码,该怎么办?@Halst您可以为父控件设置所需的字体,它将应用于所有子控件,因此不要调用标签的
SetFont
。如果这对您不起作用,请尝试为每个控件调用
InheritAttributes
方法。非常感谢您指向InheritAttributes。它可以工作,但是在我的例子中,它仍然需要在每个静态标签上调用。你知道如何避免吗?@Halst如果没有
inheritartributes
,如果没有看到你的代码,很难说为什么它不起作用,但我的猜测之一是,当已经创建子项时,你为父项设置了字体,要获得属性继承,必须在创建子项之前设置字体属性。