在wxPython中对多个对象应用统一字体方案
很多时候,我在wxPython应用程序中会对静态文本使用相同的字体设置。目前,我对每个静态文本对象都调用一次SetFont()
,但这样做感觉工作量太大了。不过,wxPython的示例和《wxPython In Action》这本书里没有提到这个问题。
有没有什么简单的方法,可以一次性把同样的SetFont()
设置应用到所有这些文本对象,而不用每次都单独调用呢?
4 个回答
0
如果所有的控件(小部件)已经创建好了,你可以用一个叫 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)
下面是一个使用示例,这个示例会把 frame
中的所有文字都变成默认字体,并且是斜体样式:
newFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)
newFont.SetStyle(wx.FONTSTYLE_ITALIC)
changeFontInChildren(frame, newFont)
1
也许可以尝试创建一个文本对象的子类,在你的类的 __init__
方法里直接调用 SetFont()?
或者,可以这样做:
def f(C):
x = C()
x.SetFont(font) # where font is defined somewhere else
return x
然后在你创建的每个文本对象上都加上这个:
text = f(wx.StaticText)
(当然,如果 StaticText
的构造函数需要一些参数,那么就需要修改 f
函数定义的前几行)。
5
你可以在添加任何小部件之前,先在父窗口(比如框架、对话框等)上调用设置字体的命令。这样,所有的子小部件就会自动使用这个字体。