对wxPython中的多个对象应用公共字体方案
很多时候,我会在wxPython应用程序中对静态文本使用相同的字体方案。目前,我正在为每个静态文本对象调用对wxPython中的多个对象应用公共字体方案,python,fonts,wxpython,Python,Fonts,Wxpython,很多时候,我会在wxPython应用程序中对静态文本使用相同的字体方案。目前,我正在为每个静态文本对象调用SetFont(),但这似乎是很多不必要的工作。然而,wxPython演示和wxPython行动手册并没有讨论这一点 是否有一种方法可以轻松地将相同的SetFont()方法应用于所有这些文本对象,而无需每次单独调用?也许可以尝试对文本对象进行子类化,然后在类中调用SetFont() 或者,像这样做: def f(C): x = C() x.SetFont(font) # where
SetFont()
,但这似乎是很多不必要的工作。然而,wxPython演示和wxPython行动手册并没有讨论这一点
是否有一种方法可以轻松地将相同的
SetFont()
方法应用于所有这些文本对象,而无需每次单独调用?也许可以尝试对文本对象进行子类化,然后在类中调用SetFont()
或者,像这样做:
def f(C):
x = C()
x.SetFont(font) # where font is defined somewhere else
return x
然后用它装饰你创建的每个文本对象:
text = f(wx.StaticText)
(当然,如果
StaticText
构造函数需要一些参数,则需要更改f
函数定义中的第一行)。如果已经创建了所有小部件,则可以递归应用SetFont
,例如使用以下函数:
def changeFontInChildren(win, font):
'''
Set font in given window and all its descendants.
@type win: L{wx.Window}
@type font: L{wx.Font}
'''
try:
win.SetFont(font)
except:
pass # don't require all objects to support SetFont
for child in win.GetChildren():
changeFontInChildren(child, font)
使框架
中的所有文本成为斜体默认字体的示例用法:
newFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
newFont.SetStyle(wx.FONTSTYLE_ITALIC)
changeFontInChildren(frame, newFont)
在添加任何小部件之前,可以通过在父窗口(框架、对话框等)上调用SetFont来实现这一点。子部件将继承字体。当在已经有子部件并且已经显示的面板中动态更改字体时,@DzinX给出的解决方案对我有效 我最终对它进行了如下修改,因为原来的版本在一些特殊情况下给我带来了麻烦(即使用带有浮动帧的
AuiManager
)
def change\u font\u子项(win,font):
'''
在给定窗口及其所有子窗口中设置字体。
@键入win:L{wx.Window}
@键入字体:L{wx.font}
'''
对于win.GetChildren()中的子项:
更改子项中的字体(子项,字体)
尝试:
win.SetFont(字体)
win.Update()
除:
pass#不要求所有对象都支持SetFont