PyQt - 事件绑定(在QCloseEvent发生时调用函数) - 过程样式

时间:2015-04-09 18:40:54

标签: python-3.x pyqt5

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

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

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_())

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

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

w.closeEvent = closeEvent

这将适用于您的示例。

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

import types
...

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

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