【发布时间】:2012-03-04 04:54:18
【问题描述】:
有没有办法检测用户是否试图关闭窗口? 例如,在 Tkinter 中我们可以这样做:
def exit_dialog():
#do stuff
pass
root = Tk()
root.protocol("WM_DELETE_WINDOW", exit_dialog)
root.mainloop()
谢谢。
【问题讨论】:
标签: python pyqt tkinter pyqt4 pyside
有没有办法检测用户是否试图关闭窗口? 例如,在 Tkinter 中我们可以这样做:
def exit_dialog():
#do stuff
pass
root = Tk()
root.protocol("WM_DELETE_WINDOW", exit_dialog)
root.mainloop()
谢谢。
【问题讨论】:
标签: python pyqt tkinter pyqt4 pyside
在主窗口中覆盖QWidget 的closeEvent 方法。
例如:
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
【讨论】:
canExit
aboutToQuit,就像使用 Qt Designer 定义 .ui、pyside-uic 将其转换为 . py 你不手动编辑,然后这个单独的文件供用户实现 UI 元素?
如果您只想检测一个窗口(即最后一个窗口),则可以使用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(),缺乏经验!
【讨论】: