重构事件处理器

在PyQt5中,事件处理器经常被重写(也就是用自己的覆盖库自带的)。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial 
In this example, we reimplement an 
event handler. 
Author: Jan Bodnar
Website: zetcode.com 
Last edited: August 2017
"""
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QApplication
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):  
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Event handler')
        self.show()
    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Escape:
            self.close()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

这个例子中,我们替换了事件处理器函数keyPressEvent()

def keyPressEvent(self, e):
    if e.key() == Qt.Key_Escape:
        self.close()

此时如果按下ESC键程序就会退出。

下一节:事件对象是用python来描述一系列的事件自身属性的对象。