有没有办法在PyQt应用程序结束前调用一个函数?
我正在收集我应用程序的使用统计数据,其中包括每次会话持续的时间。不过,我似乎无法保存这些信息,因为我尝试的信号都没有成功调用我的 report_session 函数。
我已经尝试过的信号有:
- lastWindowClosed()
- aboutToQuit()
- destroyed()
要么这些信号根本没有被触发,要么应用程序在那之后活得不够久,无法运行其他任何东西。以下是我的主程序:
app = QtGui.QApplication(sys.argv)
ui = MainWindow()
ui.app = app
QtCore.QObject.connect(ui, QtCore.SIGNAL("destroyed()"), ui.report_session)
ui.show()
logger.info('Started!')
splash.finish(ui)
sys.exit(app.exec_())
4 个回答
5
把代码放在 app.exec_
和 sys.exit
之间:
ret = app.exec_()
# Your code that must run when the application closes goes here
sys.exit(ret)
8
Mark Byers 提到的方法会在主窗口关闭后运行,这时候窗口里的控件就不能用了。
如果你需要使用窗口上控件的值,最好在窗口关闭的事件中处理这些事情:
class MainWidget(QtGui.QWidget):
#...
def closeEvent(self, event):
print "closing PyQtTest"
self.SaveSettings()
# report_session()
另外,可以看看 ZetCode 教程中的消息框示例,链接在这里 PyQt4 工具包中的第一个程序(在页面的末尾)。这个示例展示了如何接受或取消关闭请求。
1
我找到了一份这个答案,里面讲的是如何重写closeEvent()这个方法。
对我来说,这个方法效果很好。