PySide/PyQt обнаруживает, если пользователь пытается закрыть окно

Есть ли способ определить, пытается ли пользователь закрыть окно? Например, в Tkinter мы можем сделать что-то вроде этого:

def exit_dialog():
    #do stuff
    pass

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

Спасибо.

Ответы

Ответ 1

Отмените closeEvent метод QWidget в главном окне.

Например:

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

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

Другая возможность - использовать сигнал QApplication aboutToQuit следующим образом:

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