wxPython中自定义事件

创建自定义事件的步骤:
定义事件类,该事件类必须继承自wx.PyCommandEvent,并定义get和set方法来获取和设置事件参数。
创建一个事件类型和一个绑定器对象去绑定该事件到特定的对象。
创建自定义事件对象,设置事件参数,并且使用ProcessEvent()方法将这个实例引入事件处理系统。
绑定自定义事件的event handler。
在event handler中响应事件。
代码:

#!/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=(300300),pos=(300,300)) 
        panel 
= wx.Panel(self, -1
        self.button1 
= wx.Button(panel,id=-1,pos=(4040),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显示出传入的事件参数。
--参考《wxPython in action》
 

 

posted on 2008-08-19 09:20  我一路走来。。。  阅读(2294)  评论(0编辑  收藏  举报