PyQt - 事件绑定(当 QCloseEvent 发生时调用一个函数) - 程序风格

PyQt - Event Binding (calling a function when the QCloseEvent occurs) - Procedural Style

我知道如何以 OOP 风格完成此操作,但我有兴趣通过了解如何以面向对象和过程的方式对 GUI 工具包进行编程来充分理解 PyQt。

我的问题是如何将应用程序关闭事件(单击应用程序交叉)绑定到下面代码中的函数?应用退出时如何调用?

import sys
from PyQt5.QtWidgets import (QWidget, QToolTip,
    QPushButton, QApplication, QMessageBox)
from PyQt5.QtGui import QFont


def closeEvent(event):
    reply = QMessageBox.question(w, 'Message',
        "Are you sure to quit?", QMessageBox.Yes |
        QMessageBox.No, QMessageBox.No)

    if reply == QMessageBox.Yes:
        event.accept()
    else:
        event.ignore()

app = QApplication(sys.argv)

w = QWidget()

w.setGeometry(300, 300, 300, 200)
w.setWindowTitle('Procedural event binding - PyQt')
w.show()

sys.exit(app.exec_())

谢谢你的时间。

您可以覆盖现有的 closeEvent 小部件:

w.closeEvent = closeEvent

这将适用于您的示例。

如果你想要一个绑定方法,你可以这样做:

import types
...

def closeEvent(self, event):
    reply = QMessageBox.question(self, 'Message',
    ...

w.closeEvent = types.MethodType(closeEvent, w)