wxPython事件处理机制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wxPython事件处理机制相关的知识,希望对你有一定的参考价值。

一直没有看明白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事件处理机制的主要内容,如果未能解决你的问题,请参考以下文章

wxPython:事件处理介绍一

wxPython事件处理

wxpython在事件处理程序中赋值变量

wxPython 界面编程的有关事件

wx事件处理二

wxpython 按钮等事件的触发