欢迎访问宙启技术站
智能推送

PyQt5.QtCore.QEvent:如何捕捉和处理窗口的关闭事件

发布时间:2024-01-06 04:25:16

在 PyQt5 中,可以使用 QEvent 类来捕捉和处理窗口的关闭事件。关闭事件是在用户点击窗口的关闭按钮或者通过代码关闭窗口时触发的。

首先,我们需要继承 QWidgetQMainWindow 类,并重写它们的 closeEvent() 方法以处理关闭事件。这个方法会接收一个 QCloseEvent 参数。

下面是一个简单的例子,演示如何捕捉和处理窗口的关闭事件:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import Qt, QEvent


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle("Close Event Example")
        self.setGeometry(100, 100, 400, 300)

    def closeEvent(self, event):
        reply = ConfirmDialog("Are you sure you want to close the application?")
        
        if reply.exec_() == ConfirmDialog.Accepted:
            event.accept()
        else:
            event.ignore()


class ConfirmDialog(QDialog):
    def __init__(self, message):
        super().__init__()

        self.setWindowTitle("Confirm Dialog Example")
        self.setWindowModality(Qt.ApplicationModal)

        layout = QVBoxLayout()
        label = QLabel(message)
        layout.addWidget(label)

        button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        button_box.accepted.connect(self.accept)
        button_box.rejected.connect(self.reject)
        layout.addWidget(button_box)

        self.setLayout(layout)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

在上述例子中,我们创建了一个 MainWindow 类,并在它的 closeEvent() 方法中创建了一个自定义的对话框 ConfirmDialog 来确认用户是否要关闭应用程序。如果用户点击了对话框中的 "确认" 按钮,我们就接受关闭事件,否则忽略关闭事件。

ConfirmDialog 类是一个简单的对话框,用来显示一个消息并提供 "确认" 和 "取消" 两个按钮,通过继承 QDialog 类实现。

main 函数中,我们创建了 QApplication 对象和 MainWindow 对象,并显示主窗口。最后,通过调用 app.exec_() 进入程序的事件循环。

这样,当用户点击主窗口的关闭按钮时,将会弹出一个对话框来确认关闭操作。