web-dev-qa-db-fra.com

PySide / PyQt détecte si l'utilisateur essaie de fermer la fenêtre

existe-t-il un moyen de détecter si l'utilisateur essaie de fermer la fenêtre? Par exemple, dans Tkinter, nous pouvons faire quelque chose comme ceci:

def exit_dialog():
    #do stuff
    pass

root = Tk()
root.protocol("WM_DELETE_WINDOW", exit_dialog)
root.mainloop()

Merci.

20
SaulTigh

Remplacez la méthode closeEvent de QWidget dans votre fenêtre principale.

Par exemple:

class MainWindow(QWidget): # or QMainWindow
    ...

    def closeEvent(self, event):
        # do stuff
        if can_exit:
            event.accept() # let the window close
        else:
            event.ignore()

Une autre possibilité consiste à utiliser le signal QApplicationaboutToQuit comme ceci:

app = QApplication(sys.argv)
app.aboutToQuit.connect(myExitHandler) # myExitHandler is a callable
57
Oleh Prypin