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处理事件

整个例子,没有明白事件源是什么?是如何触发的?如何与事件处理函数关联起来的?

时间: 2024-10-11 16:10:00

wxPython事件处理机制的相关文章

wxPython:事件处理介绍一

wxPython:事件处理介绍一 事件处理是wxPython程序工作的基本机制,先看几个术语: 事件(event):应该程序期间发生的事情,要求有一个响应. 事件对象(event object):代表具体一个事件,包括事件的数据属性,为wx.Event或其子类的实例,如wx.CommandEvent/wx.MouseEvent. 事件类型(event type):wxPython分配给每个事件对象的一个整数ID. 事件驱动模型: wx.Event的子类: wx.CloseEvent:框架关闭时触

nagios 事件处理机制

接到zz的任务,实现自动化处理nagios某项报警 脑海里有个印象,这个功能之前线下做过实验 一.首先必须查看下nagios的官方文档,确认可行,以下是笔者整理的一些自认为有用的信息 1)了解命令的定义方法Writing Event Handler CommandsEvent handler commands will likely be shell or perl scripts, but they can be any type of executable that can run from

【Nginx-反向代理服务器】基础知识(一)之事件处理机制

反向代理服务器: 反向代理(ReverseProxy)方式是在服务器端接受客户端的请求,然后把请求分发给具体的服务器进行处理,然后再将服务器的响应结果反馈给客户端. 正向代理服务器与反向代理服务器的区别: 正向代理: 用户A主动访问服务器B,但是用户A的所有请求都由代理服务器Z来处理,也就是在用户A访问服务器B时,会通过代理服务器Z 反向代理: 反向代理正好与正向代理相反,用户A始终认为它访问的是原始服务器B而不是代理服务器Z,但实用际上反向代理服务器接受用户A的应答(即用户A访问的是代理服务器

Android基础入门教程——3.2 基于回调的事件处理机制

Android基础入门教程--3.2 基于回调的事件处理机制 标签(空格分隔): Android基础入门教程 本节引言 在3.1中我们对Android中的一个事件处理机制--基于监听的事件处理机制进行了学习,简单的说就是 为我们的事件源(组件)添加一个监听器,然后当用户触发了事件后,交给监听器去处理,根据不同的事件 执行不同的操作;那么基于回调的事件处理机制又是什么样的原理呢?好吧,还有一个问题:你知道 什么是方法回调吗?知道吗?相信很多朋友都是了解,但又说不出来吧!好了,带着这些疑问我们 对a

C#委托及事件处理机制浅析

事件可以理解为某个对象所发出的消息,以通知特定动作(行为)的发生或状态的改变.行为的发生可能是来自用户交互,如鼠标点击:也可能源自其它的程序逻辑.在这里,触发事件的对象被称为事件(消息)发出者(sender),捕获和响应事件的对象被称作事件接收者. 在事件(消息)通讯中,负责事件发起的类对象并不知道哪个对象或方法会接收和处理(handle)这一事件.这就需要一个中介者(类似指针处理的方式),在事件发起者与接收者之间建立关联.在.NET Framework中,定义了一个特殊的类型(delegate

android开发详解(六)--------------事件处理机制

1.工程目录 2.FireEvent.java package com.example.fireeevent; import java.util.EventObject; //着火事件类,绑定事件源 public class FireEvent extends EventObject { private Object eventSource; public FireEvent(Object source) { super(source); // TODO Auto-generated const

ActionScript的事件处理机制处理机制

ActionScript和JavaScript的事件处理机制处理机制几乎完全相同,所不同的主要是ActionScript的事件处理机制还提供了一个 事件对象. 在ActionScript中,所有的事件的起点都是一个通用的事件对象,其他事件通过继承该通用的事件对象添加其它的信息. 事件对象提供的信息一般都会包括: 事件来源 数据引用 事件的类型 下面是示例程序: <?xml version="1.0" encoding="utf-8"?> <s:Ap

Android的Touch事件处理机制

Android的Touch事件处理机制比较复杂,特别是在考虑了多点触摸以及事件拦截之后. Android的Touch事件处理分3个层面:Activity层,ViewGroup层,View层. 首先说一下Touch事件处理的几条基本规则. 1.如果在某个层级没有处理ACTION_DOWN事件,那么该层就再也收不到后续的Touch事件了直到下一次ACTION_DOWN事件. 说明:a.某个层级没有处理某个事件指的是它以及它的子View都没有处理该事件. b.这条规则不适用于Activity层(它是顶

【转】Qt 事件处理机制 (下篇)

转自:http://mobile.51cto.com/symbian-272816.htm 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生.分发.接受和处理事件. 继续我们上一篇文章继续介绍,Qt 事件处理机制 (上篇) 介绍了Qt框架的事件处理机制:事件的产生.分发.接受和处理,并以视窗系统鼠标点击QWidget为例,对代码进行了剖析,向大家分析了Qt框架如何通过Event Loop处理进入处理消息队列循环,如何一步一步委派给平台相关的