有没有办法检测用户是否试图关闭窗口? 例如,在Tkinter中我们可以这样做:
def exit_dialog():
#do stuff
pass
root = Tk()
root.protocol("WM_DELETE_WINDOW", exit_dialog)
root.mainloop()
感谢。
答案 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(),缺乏经验!