通过前几章的 Pygame 程序,我们已经学习了事件处理器,另外了解了如何使用事件处理器查找键盘和鼠标活动(也就是事件)。这些内容对 PythonCard 同样适用。
PythonCard 程序有一个类型为 Background 的类。在代码清单 20-1 中,我们把它命名为 MainWindow(第 3 行),不过使用任何名字都可以。在这个类中,我们定义了窗口的事件处理器。由于按钮在主窗口中,所以按钮的事件处理器要放在这里。
事件处理器定义从第 5 行开始。PythonCard 事件处理器以 on_ 开头,后面是组件名(在这里就是 helloButton),然后是另一个下划线,最后是事件类型。所以这个事件处理器名为 on_helloButton_mouseClick。
mouseClick 只是按钮的事件之一。按钮还有 mouseDown、mouseUp、mouseDrag、mouseMove、mouseDoubleClick 以及其他一些事件。
什么是 self
在 on_helloButton_mouseClick 事件处理器中,有两个参数:self 和 event。它们分别是什么? PythonCard 事件处理器总是有两个参数,通常被称为 self 和 event。(也可以是其他任何名字,不过一般约定使用 self 和 event。)
第 14 章刚开始讨论对象时曾经说过,self 指示调用方法的实例。在这里,所有事件都来自背景或主窗口,所以就是由这个窗口对象调用事件处理器。在这里,self 指示主窗口。你可能以为 self 指示所点击的组件,不过事实并不是这样;它指示的是包含组件的窗口。
event 指示要响应的事件类型(这里就是鼠标点击)。