基本的なコントロール(1)

スタティックテキスト
  • wx.StaticTextクラスを使用する
  • シグネチャは、wx.StaticText(parent, id, label, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, name="staticText")
  • 整列、フォント、色を変更可能
  • マウスイベントは受け取らない
  • styleは以下のフラグを指定可能。wx.ALIGN_CENTER、wx.ALIGN_LEFT(デフォルト)、wx.ALIGN_RIGHT、wx.ST_NO_AUTOSIZE
  • wx.StaticTextクラスのメソッドは、ここでは省略
  • 複雑なテキストは、wx.html.HTMLWindowクラスで可能
  • wx.lib.stattext.GetStaticTextクラスでもテキストを表示可能。このクラスはPython独自の実装で、C++版よりもポータビリティがありマウスイベントも受け取る
  • バイスコンテキストにDrawText(text, x, y)メソッド、DrawRotatedText(text, x, y, angle)メソッドを使用してもテキスト表示可能
mport wx

class StaticTextFrame(wx.Frame):
    def __init__(self):
        super(StaticTextFrame, self).__init__(None, -1, 'wx.StaticText', size=(400, 100))
        panel = wx.Panel(self, -1)
        wx.StaticText(panel, -1, 'This is a static text.', (100, 10))
        center = wx.StaticText(panel, -1, 'align center', (100, 30), (160, -1), wx.ALIGN_CENTER)
        center.SetForegroundColour('white')
        center.SetBackgroundColour('black')
		
if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = StaticTextFrame()
    frame.Show()
    app.MainLoop()	

テキストコントロール
  • wx.TextCtrlクラスを使用する
  • シグネチャは、wx.TextCtrl(parent, id, value="", pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, validator=wx.DefaultValidator, name=wx.TextCtrlNameStr)
  • validator引数には、wx.Validatorクラスを使い、入力されたデータをチェックできる
  • styleは以下のフラグを指定可能。以下は単一行のテキストコントロール用。wx.TE_CENTER、wx.TE_LEFT(デフォルト)、wx.TE_NOHIDESEL、wx.TE_PASSWORD、wx.TE_PROCESS_ENTER、wx.TE_PROCESS_TAB、wx.TE_READONLY、wx.TE_RIGHT
  • パスワード用に文字をマスクすることも可能
  • wx.TextCtrlクラスのメソッドは、ここでは省略
  • wx.TextCtrlとは関係ないが、wx.stc.StyledTextCtrlというのもある。これはwxWidgetsでなくScintillaでサポートされているもののラッパー
import wx

class TextCtrlFrame(wx.Frame):
    def __init__(self):
        super(TextCtrlFrame, self).__init__(None, -1, 'wx.TextCtrl', size=(300, 100))
        panel = wx.Panel(self, -1)
        sttxt = wx.StaticText(panel, -1, 'Basic Control:')
        txtctrl = wx.TextCtrl(panel, -1, 'Please Input Text', size=(175, -1))
        txtctrl.SetInsertionPoint(0)
        sizer = wx.FlexGridSizer(cols=2, hgap=6, vgap=6)
        sizer.AddMany([sttxt, txtctrl])
        panel.SetSizer(sizer)
		
if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = TextCtrlFrame()
    frame.Show()
    app.MainLoop()

  • 複数行のテキストコントロールもしくはリッチテキストコントロール用のstyleフラグは以下の通り。wx.HSCROLL、wx.TE_AUTO_URL、wx.TE_DONTWRAP、wx.TE_LINEWRAP、wx.TE_MULTILINE、wx.TE_RICH、wx.TE_RICH2、wx.TE_WORDWRAP
  • テキストコントロールに保存されているテキストはどのOSでも改行コードが\nに変換されて保存される。つまり、テキストコントロールに与えた文字列と保存されている文字列は一致しているとは限らないので注意。文字列処理はwx.TextCtrlのメソッドを積極的に使用すべき
  • wx.TextCtrlのイベントは以下の通り。例えば、frame.Bind(wx.EVT_TEXT, frame.OnText, text)のように指定する。
  • wx.EVT_TEXT、wx.EVT_TEXT_ENTER、wx.EVT_TEXT_URL、wx.EVT_TEXT_MAXLEN。wx.EVT_TEXTはユーザ入力もしくはSetValue()メソッドにより、コントロール内の文字列が変更されると発生する
フォント
  • wx.Fontクラスを使用する
  • シグネチャは、wx.Font(pointSize, family, style, weight, underline=False, faceName="", encoding=wx.FONTENCODING_DEFAULT)
  • familyはシステムで使用可能なら例えば以下のものが使用可能。wx.DECORATIVE、wx.DEFAULT、wx.MODERN、wx.ROMAN、wx.SCRIPT、wx.SWISS
  • styleは以下のものが使用可能。wx.NORMAL、wx.SLANT、wx.ITALIC
  • weightは太さを表し以下を指定可能。wx.NORMAL、wx.LIGHT、wx.BOLD
  • 以下でシステムで利用できるフォントを取得可能。
>>> import wx
>>> app = wx.PySimpleApp()
>>> e = wx.FontEnumerator()  # 固定フォントのみが必要なら、wx.FontEnumerator(fixedWidth=True)
>>> e.EnumerateFacenames()
True
>>> e.GetFacenames()
[u'System', u'@System', u'Terminal', u'@Terminal', ... u'Nina']