Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对wxPython中的多个对象应用公共字体方案_Python_Fonts_Wxpython - Fatal编程技术网

对wxPython中的多个对象应用公共字体方案

对wxPython中的多个对象应用公共字体方案,python,fonts,wxpython,Python,Fonts,Wxpython,很多时候,我会在wxPython应用程序中对静态文本使用相同的字体方案。目前,我正在为每个静态文本对象调用SetFont(),但这似乎是很多不必要的工作。然而,wxPython演示和wxPython行动手册并没有讨论这一点 是否有一种方法可以轻松地将相同的SetFont()方法应用于所有这些文本对象,而无需每次单独调用?也许可以尝试对文本对象进行子类化,然后在类中调用SetFont() 或者,像这样做: def f(C): x = C() x.SetFont(font) # where

很多时候,我会在wxPython应用程序中对静态文本使用相同的字体方案。目前,我正在为每个静态文本对象调用
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