1. 程式人生 > >wxPython事件處理機制

wxPython事件處理機制

參數 過程 Coding vtt nbu roc pre 是我 說明

一直沒有看明白wxPython的自定義事件是如何工作的。如果要自定義事件,那麽需要明白事件源,事件類型,事件處理函數,以及事件綁定器; 但是我在整個過程中沒有看到這幾個概念是如何關聯起來的。下面舉例說明一下我的疑問,先看下代碼:

 1 #!/usr/bin/env python
 2 
 3 #coding=utf-8
 4 
 5 import wx 
 6 
 7 class MyTestEvent(wx.PyCommandEvent):   #1 定義事件          
 8 
 9     def __init__(self, evtType, id):                 
10 11 wx.PyCommandEvent.__init__(self, evtType, id) 12 13 self.eventArgs = "" 14 15 16 17 def GetEventArgs(self): 18 19 return self.eventArgs 20 21 22 23 def SetEventArgs(self, args): 24 25 self.eventArgs = args 26 27 28
29 myEVT_MY_TEST = wx.NewEventType() #2 創建一個事件類型 30 31 EVT_MY_TEST = wx.PyEventBinder(myEVT_MY_TEST, 1) #3 創建一個綁定器對象 32 33 34 35 36 37 class MyFrame(wx.Frame): 38 39 40 41 def __init__(self): 42 43 wx.Frame.__init__(self, None, -1, "My Frame", size=(300, 300),pos=(300,300))
44 45 panel = wx.Panel(self, -1) 46 47 self.button1 = wx.Button(panel,id=-1,pos=(40, 40),label="button1") 48 49 self.Bind(wx.EVT_BUTTON, self.OnButton1Click, self.button1) 50 51 self.Bind(EVT_MY_TEST, self.OnHandle)# 4綁定事件處理函數 52 53 54 55 def OnButton1Click(self,event): 56 57 self.OnDoTest() 58 59 60 61 def OnHandle(self,event):#8 事件處理函數 62 63 dlg = wx.MessageDialog(self, event.GetEventArgs(),A Message Box,wx.OK | wx.ICON_INFORMATION) 64 65 dlg.ShowModal() 66 67 dlg.Destroy() 68 69 70 71 def OnDoTest(self): 72 73 evt = MyTestEvent(myEVT_MY_TEST, self.button1.GetId()) #5 創建自定義事件對象 74 75 evt.SetEventArgs("test event") # 6添加數據到事件 76 77 self.GetEventHandler().ProcessEvent(evt) #7 處理事件 78 79 80 81 82 83 if __name__ == __main__: 84 85 app = wx.PySimpleApp() 86 87 frame = MyFrame() 88 89 frame.Show(True) 90 91 app.MainLoop()

#1 : 創建事件類,繼承自pyCommandEvent類,這個沒有疑問;
#2 :創建一個事件類型,這個類似於wx.NewID,確保事件類型唯一性
#3:創建一個綁定器對象,PyEventBinder類的實例,但是這個函數一直沒有明白第二個參數是做什麽的?
#4:綁定器函數將綁定器對象與事件處理函數綁定起來
#5:創建自定義事件對象,這個是用來後面處理事件用的;
#6:添加數據到事件;
#7:調用ProcessEvent處理事件

整個例子,沒有明白事件源是什麽?是如何觸發的?如何與事件處理函數關聯起來的?

wxPython事件處理機制