2008-10-05 6 views
3

여러 번 wxPython 응용 프로그램의 정적 텍스트에 동일한 글꼴 체계를 사용합니다. 현재 SetFont() 각 정적 텍스트 개체에 대한 호출하지만 그것은 불필요한 많은 작업처럼 보입니다. 그러나 wxPython 데모와 wxPython In Action 책에서는이 문제를 다루지 않습니다.wxPython의 여러 객체에 공통 글꼴 체계 적용

매번 별도의 전화를 걸지 않고도 모든 텍스트 개체에 동일한 SetFont() 메서드를 쉽게 적용 할 수 있습니까?

답변

1

아마도 텍스트 객체를 서브 클래 싱하려고하고 클래스 __init__ 메서드는 SetFont()를 호출하기 만하면됩니까? 당신이 그것으로 작성하는 모든 텍스트 개체를 장식 한 후

def f(C): 
    x = C() 
    x.SetFont(font) # where font is defined somewhere else 
    return x 

과 : 그런 짓을

또는

text = f(wx.StaticText) 

(물론 StaticText 생성자는 몇 가지 매개 변수를 필요로하는 경우

, 그것은 것입니다 함수 정의의 첫 번째 행을 변경해야 함). 모든 위젯이 이미 생성 된 경우, 다음과 같은 기능을 가진 예를 들어, 재귀 SetFont을 적용 할 수 있습니다

0

:

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) 
5

위젯을 추가하기 전에 부모 창 (프레임, 대화 상자 등)에서 SetFont를 호출하여이 작업을 수행 할 수 있습니다. 하위 위젯은 글꼴을 상속합니다.