как открыть диалоговое окно при закрытии программы?

Как при закрытии программы спросить, закрыть ли программу или нет?

пример кода:

from PyQt5 import QtCore, QtGui, QtWidgets
import sys

class Main(object):
    def __init__(self):
        super(Main, self).__init__()
        self.setFixedSize(423, 293)

        self.lineEdit1 = QtWidgets.QLineEdit("", self)
        self.lineEdit1.resize(321, 51)
        self.lineEdit1.move(50, 80)

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)                        
    w = Main()
    w.show()

    sys.exit(app.exec_())

Ответы (1 шт):

Автор решения: S. Nick

void QWidget::closeEvent(QCloseEvent *event)

Этот обработчик события вызывается с данным событием, когда Qt получает запрос на закрытие окна для виджета верхнего уровня из оконной системы.

import sys
from PyQt5 import QtCore, QtGui, QtWidgets


class Main(QtWidgets.QWidget):                 #(object):
    def __init__(self):
        super(Main, self).__init__()
        self.setFixedSize(423, 293)

        self.lineEdit1 = QtWidgets.QLineEdit("", self)
        self.lineEdit1.resize(321, 51)
        self.lineEdit1.move(50, 80)

    def closeEvent(self, event):
        reply = QtWidgets.QMessageBox.question(
                    self, 
                    "Exit", 
                    "Are you sure to quit?", 
                    QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
                    QtWidgets.QMessageBox.No
        )

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


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)                        
    w = Main()
    w.show()

    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка