PyQt5 Methode closeEvent

Ich bin derzeit lernen, wie man eine Anwendung erstellen, mit pyqt5 und traf auf einige problem mit closeEvent-Methode überschrieben, damit der Benutzer wird zur Bestätigung aufgefordert durch QMessageBox-Objekt. Es scheint, arbeiten gut mit X-Taste - event wird 'akzeptiert', wenn die Aktion bestätigt und 'abgebrochen', wenn Sie auf Abbrechen-Schaltfläche geklickt wird. Jedoch, wenn ich meine Schaltfläche "Beenden" aus dem dropdown-Menü Datei, egal auf welche Schaltfläche ich klicke, das Programm wird geschlossen mit exit-code 1. Scheint seltsam, weil ich mit derselben Methode closeEvent in beiden Fällen.

import sys

from PyQt5.QtWidgets import QApplication, QMessageBox, QMainWindow, QAction


class window(QMainWindow):
    def __init__(self):

        super().__init__()

    def createUI(self):


        self.setGeometry(500, 300, 700, 700)

        self.setWindowTitle("window")


        quit = QAction("Quit", self)
        quit.triggered.connect(self.closeEvent)

        menubar = self.menuBar()
        fmenu = menubar.addMenu("File")
        fmenu.addAction(quit)

    def closeEvent(self, event):
        close = QMessageBox()
        close.setText("You sure?")
        close.setStandardButtons(QMessageBox.Yes | QMessageBox.Cancel)
        close = close.exec()

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

main = QApplication(sys.argv)
window = window()
window.createUI()
window.show()
sys.exit(main.exec_())

Dank für die Anregungen!

  • haben Sie es ausführen in Konsole/terminal ? Sie haben die Fehlermeldung. AttributeError: 'bool' object has no attribute 'accept'
  • wenn Sie klicken Sie auf die Schaltfläche system dann rufen Sie Ihre Funktion, aber mit unterschiedlichen event Objekt, das nicht über accept() und ignore(), so erhalten Sie die Fehlermeldung, und das Programm beendet mit exit-code 1.
InformationsquelleAutor Hugh Mongous | 2016-11-16
Schreibe einen Kommentar