wxPython 基本部分学習のまとめ
以下おぼえている点を書き出して、後から訂正・補足。
wxPython アプリケーションの実行
wx.Frame を継承した独自クラスのインスタンスを作成し、 wx.PySimpleApp など wx.App のインスタンスに登録して実行
- wx.Frame.__init__ の引数は、 self, parent, id, title
- wx.PySimpleApp.SetTopWindow(wnd) でトップレベルウィンドウを設定
- しかし SetTopWindow を呼ばなくても動いてたりする。
- wx.PySimpleApp.MainLoop() でメインループ
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()
だいたい基本はおさえたつもりになったので、後はコードを書いていくうちに
よく使う部分を指が覚えていってくれれば使えるようになっていくことでしょう。
というわけで次からはリソースエディタについて調べて行こうと思います。