wxPython的事件处理

来源:互联网 发布:程序员鼓励师是真的吗 编辑:程序博客网 时间:2024/05/20 03:48

事件绑定器:描述组件、事件类型号与事件响应间的关联——实际上是事件类型号的对应实例

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绑定(事件绑定器,事件响应,底层事件源)
原创粉丝点击