PySide / PyQt检测用户是否试图关闭窗口

时间:2012-02-12 14:22:30

标签: python pyqt tkinter pyqt4 pyside

有没有办法检测用户是否试图关闭窗口? 例如,在Tkinter中我们可以这样做:

def exit_dialog():
    #do stuff
    pass

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

感谢。

2 个答案:

答案 0 :(得分:55)

在主窗口中覆盖QWidget的{​​{3}}方法。

例如:

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

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

另一种可能性是使用QApplication的{​​{3}}信号,如下所示:

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

答案 1 :(得分:1)

如果只有一个要检测的窗口(即最后一个窗口),则可以使用setQuitOnLastWindowClosed静态函数和lastWindowClosed信号。

from PySide2 import QtGui
import sys


def keep_alive():
    print("ah..ah..ah..ah...staying alive...staying alive")
    window.setVisibility(QtGui.QWindow.Minimized)


if __name__ == '__main__':
    app = QtGui.QGuiApplication()
    app.setQuitOnLastWindowClosed(False)
    app.lastWindowClosed.connect(keep_alive)

    window = QtGui.QWindow()
    window.show()

    sys.exit(app.exec_())

希望对某人有帮助,它为我工作,因为我第一次尝试时无法覆盖closeEvent(),缺乏经验!