wxPython的事件处理过程设计得相当合理,也做了很多简化工作(就是对于程序员更友好),但这个冰山之下,还是有很多复杂的主题,通过学习wxPython in action,终于搞明白了一些
先看两张最重要的图(还是用的我老博客livahu的两张图,没有修改图注)
现在先说说图1
wxPython应用程序使用基于事件的控制流。应用程序的大部分时间花费在一个主循环中,等待事件并分派它们到适当的处理器函数。
从用户的角度上来看,wxPython程序大部分时间什么也不做,一直闲着直到用户或系统做了些什么来触发这个事件处理函数(EventHandler)。 wxPython程序的结构就是一个事件驱动程序体系的例子。事件驱动系统的主循环类似于客户服务呼叫中心的操作者。当没有呼叫的进入的时候,这个操作者处于等待状态。当一个事件发生的时候,如电话铃响了,这个操作者开始一个响应过程,他与客户交谈直到他获得足够的信息以分派该客户给一个合适的回答者。然后操作者等待下一个事件。
再看图2
wxPython的事件类都是wx.Event类的子类,wxPython的事件分为低级事件和高级事件。鼠标敲击、移动这样的事件是低级事件,而它们可以构成高级事件,如选择一个下拉列表中的一项
由wxPython窗口部件引起的高级事件是类wx.CommandEvent的子类,默认情况,只有wx.CommandEvent及其子类的实例向上展开至容器级。其它的所有事件不这样做。
明白了这两点,就好说了,我将结合一段代码来说明问题
#
!/usr/bin/env python
# -*- coding:utf-8 -*-
import wx
# -*- coding:utf-8 -*-
import wx