Je suis nouveau à Pyqt. Je transfère une de mes applications de Tkinter à Pyqt. Ce que je veux, c'est le scénario suivant: Lorsque l'utilisateur clique sur le bouton X, la messagerie MESSAGE demande si l'utilisateur est sûr de la fermeture apparaîtra lorsque l'écran principal est toujours ouvert. Cependant, dans mon code, lorsque le bouton X est cliqué, l'écran principal disparaît en premier et la boîte de message se pose. Comment puis-je résoudre ce "problème de commande" -as j'appelle? Mon code est ci-dessous:
(dans tkinter, ceci a été facile avec le code root.protocol ("wm_delete_window" ("wm_delete_window") code> et une fonction on_clusion contenant
Messagebox.askokcancel ("Quitter" , "Voulez-vous quitter la chat de chit-chat?") Code> Commande. Cependant, je ne pouvais pas bien comprendre dans Pyqt.) P>
3 Réponses :
Vous pouvez choisir si accepter l'événement ou non.
def closeEvent(self, event): if self.popup_question(): print("The program was shut down.") event.accept() else: print("not exiting") event.ignore() def popup_question(self): """Generate a popup that requests if you want to do something or not.""" msgbox = QtWidgets.QMessageBox() msgbox.setWindowTitle("Whatever title you want to add.") msgbox.setIcon(QtWidgets.QMessageBox.Warning) msgbox.setText("Do you want to quit chit chat?") botonyes = QtWidgets.QPushButton("Yes") msgbox.addButton(botonyes, QtWidgets.QMessageBox.YesRole) botonno = QtWidgets.QPushButton("No") msgbox.addButton(botonno, QtWidgets.QMessageBox.NoRole) msgbox.exec_() if msgbox.clickedButton() == botonno: return False else: return True
Utiliser FunCoTools CODE> Pour remplacer le widget de votre fenêtre
ClosteeVentant Code> sans créer de classe enfant, puis accepter ou annuler l'événement proche en utilisant
event.accept () code > ou
event.ignore () code>: