wxPythonでGUIアプリを作る イベント処理
メニューを選択したときのイベント処理を実装してみましょう・
イベント処理
import wx class MyFrame(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__(self, parent, title=title, size=(200,100)) filemenu= wx.Menu() menuExit = filemenu.Append(wx.ID_EXIT, "&Exit","exit") #メニュー・イベント・イベントハンドラをリンクさせる self.Bind(wx.EVT_MENU, self.OnExit, menuExit) menuBar = wx.MenuBar() menuBar.Append(filemenu,"&File") self.SetMenuBar(menuBar) self.Show(True) #Exitメニュー選択時に行う処理 def OnExit(self, event): self.Close() app = wx.App(False) frame = MyFrame(None, 'myFrame') app.MainLoop()
各種イベントはwx.Eventクラスを継承したサブクラスとして定義されています。例えばメニューが選択された場合のイベントはwx.EVT_MENUです。メニューとメニューイベント、イベントを受け取った時に呼ばれる関数をそれぞれ結びつけるにはwx.FrameのBindメソッドを利用します。このとき引数にはイベント、イベント処理メソッド、選択するメニューアイテムを指定します。
self.Bind(wx.EVT_MENU, self.OnExit, menuExit)
イベントは他にも様々なものが予め用意されています。利用できるイベントの一覧はこちらから確認できます。
→ListOfEvents - wxPyWiki
ダイアログを表示させる例
メニューを押してダイアログを表示させる例です。
Openメニューでファイル選択ダイアログが、Exitメニューでメッセージボックスが表示されます。
import wx class MyFrame(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__(self, parent, title=title, size=(200,100)) filemenu= wx.Menu() menuOpen = filemenu.Append(wx.ID_OPEN, "&Open","open project") menuExit = filemenu.Append(wx.ID_EXIT, "&Exit","exit project") self.Bind(wx.EVT_MENU, self.OnOpen, menuOpen) self.Bind(wx.EVT_MENU, self.OnExit, menuExit) menuBar = wx.MenuBar() menuBar.Append(filemenu,"&File") self.SetMenuBar(menuBar) self.Show(True) def OnOpen(self, e): self.dirName = '' #ファイル選択ダイアログの表示 dialog = wx.FileDialog(self, "Choose a file", self.dirName, "", "*.*", wx.OPEN) #OKボタンが押されるまで表示 if dialog.ShowModal() == wx.ID_OK: self.fileName = dialog.GetFilename() self.dirName = dialog.GetDirectory() file = open(os.path.join(self.dirName, self.fileName), 'r') #ファイルデータ読み込み file.close() #ダイアログの破棄 dialog.Destroy() def OnExit(self, e): #メッセージダイアログの表示 dialog = wx.MessageDialog( self, "exit?", "Messege title", wx.OK) dialog.ShowModal() dialog.Destroy() self.Close() app = wx.App(False) frame = MyFrame(None, 'myFrame') app.MainLoop()