wxPython 基本部分学習のまとめ

以下おぼえている点を書き出して、後から訂正・補足。

wxPython アプリケーションの実行

wx.Frame を継承した独自クラスのインスタンスを作成し、 wx.PySimpleApp など wx.App のインスタンスに登録して実行

  • wx.Frame.__init__ の引数は、 self, parent, id, title
  • wx.PySimpleApp.SetTopWindow(wnd) でトップレベルウィンドウを設定
    • しかし SetTopWindow を呼ばなくても動いてたりする。
  • wx.PySimpleApp.MainLoop() でメインループ

wxPython のコントロールの生成

コントロールのコンストラクタには親ウィンドウ、ID、コントロールごとのパラメータを渡して初期化する

  • ここは概ねOK

wxPython のコントロールの配置

wx.Sizer のサブクラスを使用する。 wx.BoxSizer など。

  • wx.BoxSizer のコンストラクタの引数として wx.VERTICAL か wx.HORIZONTAL を指定する
  • sizer へのコントロールの追加は Add(ctrl, weight, expand)
  • sizer を有効にするためには、 wx.Window.SetSizer(sizer) を呼び出す。
  • sizer で大きさを制御するためには wx.Window.SetAutoLayout(True) で有効にしてから wx.Sizer.Fit(wnd) を呼び出す。

wxPython のコントロールのイベント処理

Bind を使う(本来の)方法
  • self.Bind(wx.EVT_SOMETHING, evt_handler)
  • self.Bind(wx.EVT_SOMETHING, evt_handler, srcWin)

一つ目は自分に届いたイベントを全て処理する。二つ目は指定のウィンドウから届いたイベントのみを処理する。
メニューアイテムは2番目の方法で処理するが、それ以外は可能な限り1番目の方法を使用する。

簡易版を使用する

wx.EVT_CHECKBOX(self, evt_handler)

  • wx.EVT_CHECKBOX(self, id, evt_handler) の間違い.


そんなこんなで復習のために作成したプログラムがこちら。

#coding: shift_jis
import wx

# wx.Frame を継承した独自クラスを定義
class MyFrm(wx.Frame):
    # 初期化関数
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title)
        # ボタンを作成してイベントハンドラを設定
        self.btn=wx.Button(self, 1, "click")
        wx.EVT_BUTTON(self, 1, self.OnBtn)
        # チェックボックスを作成してイベントハンドラを設定
        self.chk=wx.CheckBox(self, 2, "check")
        wx.EVT_CHECKBOX(self, 2, self.OnChk)
        # 縦に並べる sizer を作成
        self.sizer=wx.BoxSizer(wx.VERTICAL)
        # sizer にコントロールを登録
        self.sizer.Add(self.btn, 0)
        self.sizer.Add(self.chk, 0)
        # sizer を有効にしてサイズを調整
        self.SetSizer(self.sizer)
        self.SetAutoLayout(True)
        self.sizer.Fit(self)
        # ウィンドウを表示する
        self.Show(True)
    # ボタンのイベントハンドラ
    def OnBtn(self, evt):
        # ボタンが押されたことを標準出力に表示
        print "button is clicked."
    # チェックボックスのイベントハンドラ
    def OnChk(self, evt):
        # チェック状態を標準出力に表示
        if self.chk.IsChecked():
            print "check box is checked."
        else:
            print "check box is not checked."

# アプリケーション作成
app=wx.PySimpleApp()
# ウィンドウ作成
frm=MyFrm(None, 0, "MyFrm")
# トップレベルウィンドウ設定
app.SetTopWindow(frm)
# メインループ
app.MainLoop()

だいたい基本はおさえたつもりになったので、後はコードを書いていくうちに
よく使う部分を指が覚えていってくれれば使えるようになっていくことでしょう。

というわけで次からはリソースエディタについて調べて行こうと思います。