3

多くの場合、wxPythonアプリケーションの静的テキストに同じフォントスキームを使用します。現在、SetFont()静的テキストオブジェクトごとに呼び出しを行っていますが、これは多くの不要な作業のようです。ただし、wxPythonデモとwxPythonInActionの本ではこれについて説明していません。

SetFont()毎回別々に呼び出すことなく、これらすべてのテキストオブジェクトに同じメソッドを簡単に適用する方法はありますか?

4

4 に答える 4

5

これを行うには、ウィジェットを追加する前に、親ウィンドウ (Frame、Dialog など) で SetFont を呼び出します。子ウィジェットはフォントを継承します。

于 2008-10-08T19:55:40.720 に答える
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関数定義の最初の行を変更する必要があります)。

于 2008-10-05T08:38:36.050 に答える
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)
于 2008-10-08T14:01:16.880 に答える
0

上記の@DzinXによる解決策は、すでに子があり、すでに表示されているパネルでフォントを動的に変更するときに機能しました。

オリジナルではコーナー ケース (AuiManagerフローティング フレームで を使用する場合) で問題が発生したため、最終的に次のように変更しました。

def change_font_in_children(win, font):
    '''
    Set font in given window and all its descendants.
    @type win: L{wx.Window}
    @type font: L{wx.Font}
    '''
    for child in win.GetChildren():
        change_font_in_children(child, font)
    try:
        win.SetFont(font)
        win.Update()
    except:
        pass # don't require all objects to support SetFont
于 2019-02-01T19:55:16.437 に答える