20.3 事件处理器的返回

    通过前几章的 Pygame 程序,我们已经学习了事件处理器,另外了解了如何使用事件处理器查找键盘和鼠标活动(也就是事件)。这些内容对 PyQt 同样适用。

    MyWindowClass 中,我们定义了窗口的事件处理器。因为按钮在主窗口中,所以事件处理器也要放在这里。

    首先需要告诉主窗口,我们正在为一个特定的组件编写一个事件处理器。也就是代码清单 20-2 中的第 10 行:

    self.pushButton.clicked.connect(self.button_clicked)

    这里我们将这个事件(self.pushButton.clicked)和它的事件处理器(self.button_clicked)进行了连接(或者绑定)。事件处理器 button_clicked 的定义从第 12 行开始。clicked 是我们能从按钮中获得的事件之一,其他的事件还包括 pressedreleased

    像(Python)程序员一样思考
    将按钮的事件和事件处理器连接起来的过程称为事件绑定。这是一个将事务连接在一起的编程术语。在 PyQt 和很多其他的事件驱动编程体系中,你会经常听到绑定某某东西的说法。通常你会将一个事件或者其他的信号量(signal)与用来处理事件或者信号量的代码进行绑定。信号量是一个编程术语,通常用于将信息从代码的一个地方传递到另外一个地方。

    什么是 self

    button_clicked() 事件处理器中,有个参数 self。第 14 章刚开始讨论对象时曾经说过,self 指示调用方法的实例。在这里,所有事件都来自背景或主窗口,所以就是由这个窗口对象调用事件处理器。在这里,self 指示主窗口。你可能以为 self 指示所点击的组件,不过事实并不是这样;它指示的是包含组件的窗口。