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 überaccept()
undignore()
, so erhalten Sie die Fehlermeldung, und das Programm beendet mit exit-code 1.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie auf die Schaltfläche klicken, dann das Programm aufruft, Ihre Funktion, aber mit unterschiedlichen
event
Objekt, das nicht überaccept()
undignore()
, so erhalten Sie die Fehlermeldung, und das Programm beendet mit exit-code 1.Zuzuordnen, können Sie
self.close
- und Programm-AufrufcloseEvent()
mit der richtigen event-Objekt.self.close
gibtAttributeError
undself.closeEvent
funktioniert aber nicht auslösencloseEvent()
Das problem ist zu akzeptieren, ist eine Methode, die zwar ignorieren, ist nur ein Attribut.
Dieser code funktioniert bei mir: