事件events — 存在的事件
事件是每个 GUI 应用程序的必要部分. 所有图像应用程序都是事件驱动的. 一个应用程序将对其生命周期产生的事件进行回应. 事件主要是由程序用户产生的. 当然也可能是由其它方式产生,比如互联网连接、窗口管理器以及定时器等. 在我们调用MainLoop() 方法时,应用程序就等待着事件的产生了. MainLoop() 方法在我们退出程序时终止.[more…]
在 wxPython 中应用事件功能是十分简单明了的. 只需三步:
- 识别事件名字:比如 wx.EVT_SIZE, wx.EVT_CLOSE 等.
- 创建一个事件处理器. 它就是一个方法, 将会在事件产生时调用到.
- 将事件绑定 (bind) 到对应的事件处理器.
在 wxPython 中我们说是把一个方法绑定到某个事件. 而有时也说钩起 (hook) 一词.
通过调用 Bind() 方法来绑定事件. 该方法有着以下参数:
Bind(event, handler, source=None, id=wx.ID_ANY, id2=wx.ID_ANY)
- “event”指某个 EVT_* 对象. 它指明了事件的类型.
- “handler”是要调用的一个目标. 换句话说,它是编程者要绑定到某个事件的那个方法.
- “source”参数,当我们想要从相同的事件中,依据不同部件而加以区分时,会用到这个参数.
- “id”参数,在我们有多个按钮、多个菜单等情况下,它被用来加以区分.
- “id2”参数,在需要将一个处理器绑定到某个范围的标示符时,要用到这个参数,比如结合EVT_MENU_RANGE一起使用.
需要注意的是,Bind() 方法是在 EvtHandler 类中定义的. 而 wx.Window 正是继承自这个类. wx.Window 又是 wxPython 中大多数部件的基础类. 同时还有与其相反的过程. 如果我们想要解除某个方法到事件的绑定,我们可以调用 Unbind() 方法. 它有着跟 Bind() 同样的参数.