J'apprends actuellement à compiler une application avec pyqt5 et j'ai rencontré un problème avec la méthode closeEvent, redéfinie pour que l'utilisateur demande confirmation à l'objet QMessageBox. Il semble bien fonctionner avec le bouton X - l'événement est 'accepté' quand l'action est confirmée et 'annulé' quand on clique sur le bouton annuler. Toutefois, lorsque j'utilise mon bouton Quit du menu déroulant Fichier, quel que soit le bouton sur lequel je clique, le programme se ferme avec le code de sortie 1. Cela semble étrange, car j'utilise la même méthode closeEvent dans les deux cas.PyQt5 méthode closeEvent
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_())
Merci pour vos suggestions!
l'avez-vous exécuté dans la console/terminal? Vous avez un message d'erreur. 'AttributeError: l'objet 'bool' n'a pas d'attribut 'accept'' – furas
lorsque vous cliquez sur le bouton alors le système appelle votre fonction mais avec un autre objet' event' qui n'a pas 'accept()' et 'ignore()' de sorte que vous obtenez Le message d'erreur et le programme se terminent par le code de sortie 1. – furas