按下 Windows X 关闭按钮时显示消息框

Show Messagebox when Windows X close button is pressed

class Ui_MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        app.atexit.connect(self.exitApp)

    def exitApp(self):
        atexit.register(self.exitApp(app))
        ret = QtGui.QMessageBox.question(None, 'Close request', 'Are you sure you want to quit?',
                                         QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
                                         QtGui.QMessageBox.Yes)
        if ret == QtGui.QMessageBox.Yes:
            sys.exit(app.exec())
        elif ret == QtGui.QMessageBox.No:
            pass

    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(1280, 760)
        MainWindow.setMaximumSize(QtCore.QSize(16777215, 16777215))

def main():
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.showMaximized()
    Ui_MainWindow.loadData(ui)
    sys.exit(app.exec_())

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    main()

我想在用户单击 Windows 关闭按钮(顶部的 X 按钮)时显示一个显示 "Are you sure you want to quit?" 的消息框。

我如何在用户点击按钮时收到信号?

解决方案可能与 类似,但我使用的是 PyQt4。

如果您不想 window 关闭,您必须覆盖 closeEvent 方法并忽略该事件。我已经稍微修改了你的代码,因为我在重现它时遇到了问题。

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

    def closeEvent(self, event):
        ret = QtGui.QMessageBox.question(None, 'Close request', 'Are you sure you want to quit?',
                                         QtGui.QMessageBox.Yes | QtGui.QMessageBox.No,
                                         QtGui.QMessageBox.Yes)
        if ret == QtGui.QMessageBox.Yes:
            QtGui.QMainWindow.closeEvent(self, event)
        else:
            event.ignore()


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