事件绑定器:描述组件、事件类型号与事件响应间的关联——实际上是事件类型号的对应实例
wx.EvtHandler:创建某一类型的事件绑定器、事件源与事件响应的绑定
每一EvtHandler保存一张格式为(事件类型,事件源(可选),事件响应)的事件触发表(cf. wxWidgets)
事件处理过程:
1. 事件被触发,创建事件实例,交给事件源的EventHandler.ProcessEvent
2. EventHandler.ProcessEvent检查是否允许处理事件,是则转3,否则转5
3. 检查EventHandler的触发表与其父类的触发表,是否有合适的事件响应,是则转4,否则转5
4. 调用事件响应,若事件响应最后调用了事件实例的Skip()则转5,否则转8
5. 是否是应当广播的事件(CommandEvent与其子类)?是则转6,否则转8
6. 是否处理事件的EventHandler是TheApp?是则转9,否则转7
7. 把事件交给其容器,转2
8. 把事件转交给TheApp处理,转9
9. 结束
一个事件的定义包括:
1. 用wx.NewEventType()定义一个新的事件类型号(整数ID)
2. 用wx.PyEventBinder(事件类型号,事件源的个数(0到2))定义新的事件绑定器
3. 定义一个事件类,接受事件类型号与事件源ID为构造参数,添加一些附加属性
4. 在底层事件源的底层事件响应中,
1. 产生这个事件类的实例
2. 设置附加属性
3. 调用self.GetEventHandler().ProcessEvent(该事件实例) #即等效于把该事件加入处理队列并立即处理之
5. 在高层窗口,用Bind绑定(事件绑定器,事件响应,底层事件源)