0
votes

Fonction de classement pyqt: la fenêtre principale disparaît

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") et une fonction on_clusion contenant Messagebox.askokcancel ("Quitter" , "Voulez-vous quitter la chat de chit-chat?") Commande. Cependant, je ne pouvais pas bien comprendre dans Pyqt.) xxx


0 commentaires

3 Réponses :


0
votes

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


0 commentaires

0
votes

Essayez-le: xxx

 Entrez la description de l'image ici


1 commentaires

Cela ne fonctionne pas lorsque je convertitons le paradigme fonctionnel. Je pense que je manque quelque chose.



0
votes

Utiliser FunCoTools Pour remplacer le widget de votre fenêtre ClosteeVentant sans créer de classe enfant, puis accepter ou annuler l'événement proche en utilisant event.accept () ou event.ignore () : xxx


0 commentaires