本文實例講述了wxpython中自定義事件的實現與使用方法。分享給大家供大家參考,具體如下:
創建自定義事件的步驟:
① 定義事件類,該事件類必須繼承自wx.PyCommandEvent,并定義get和set方法來獲取和設置事件參數。
② 創建一個事件類型和一個綁定器對象去綁定該事件到特定的對象。
③ 創建自定義事件對象,設置事件參數,并且使用ProcessEvent()方法將這個實例引入事件處理系統。
④ 綁定自定義事件的event handler。
⑤ 在event handler中響應事件。
示例代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#!/usr/bin/env python #coding=utf-8 import wx class MyTestEvent(wx.PyCommandEvent): #1 定義事件 def __init__( self , evtType, id ): wx.PyCommandEvent.__init__( self , evtType, id ) self .eventArgs = "" def GetEventArgs( self ): return self .eventArgs def SetEventArgs( self , args): self .eventArgs = args myEVT_MY_TEST = wx.NewEventType() #2 創建一個事件類型 EVT_MY_TEST = wx.PyEventBinder(myEVT_MY_TEST, 1 ) #3 創建一個綁定器對象 class MyFrame(wx.Frame): def __init__( self ): wx.Frame.__init__( self , None , - 1 , "My Frame" , size = ( 300 , 300 ),pos = ( 300 , 300 )) panel = wx.Panel( self , - 1 ) self .button1 = wx.Button(panel, id = - 1 ,pos = ( 40 , 40 ),label = "button1" ) self .Bind(wx.EVT_BUTTON, self .OnButton1Click, self .button1) self .Bind(EVT_MY_TEST, self .OnHandle) # 4綁定事件處理函數 def OnButton1Click( self ,event): self .OnDoTest() def OnHandle( self ,event): #8 事件處理函數 dlg = wx.MessageDialog( self , event.GetEventArgs(), 'A Message Box' ,wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() def OnDoTest( self ): evt = MyTestEvent(myEVT_MY_TEST, self .button1.GetId()) #5 創建自定義事件對象 evt.SetEventArgs( "test event" ) # 6添加數據到事件 self .GetEventHandler().ProcessEvent(evt) #7 處理事件 if __name__ = = '__main__' : app = wx.PySimpleApp() frame = MyFrame() frame.Show( True ) app.MainLoop() |
說明:
1.定義MyTestEvent 類為wx.PyCommandEvent的子類,wx.PyCommandEvent是wxPython特定的結構,可以用來創建新的事件類并且可以把C++類和你的Python代碼連接起來。
2. wx.NewEventType()類似于wx.NewId();它返回一個唯一的事件類型ID。
3.創建一個綁定器對象,第二個參數的取值位于[0,2]之間,它代表wxId標識號,該標識號用于wx.EvtHandler.Bind()方法去確定哪個對象是事件的源。
4.綁定事件的處理器。
5. 創建自定義事件對象,并把觸發事件的控件的ID作為參數傳給MyTestEvent的構造函數。
6.添加數據給事件。可以將一些您需要的信息通過這種方法傳遞進去。
7. ProcessEvent()的調用將這個新事件引入到事件處理系統中,GetEventHandler()調用返回wx.EvtHandler的一個實例,也就是窗口對象本身,即:MyFrame。
8.綁定事件處理函數,這里的事件處理方式是通過MessageDialog顯示出傳入的事件參數。
希望本文所述對大家Python程序設計有所幫助。