我正在收集我的应用程序的使用统计数据,其中包括每个会话持续的时间。但是,我似乎无法保存此信息,因为我尝试的所有信号实际上都无法成功调用报表会话函数。
这是我已经尝试过的信号:
要么这些信号永远不会发出,要么应用程序在这之后没有足够的时间来运行其他任何东西。这是我的主调:
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_())
把代码放在
app.exec_
和sys.exit
之间:Mark Byers发布的方法将在主小部件关闭后运行,这意味着它的控件将不再可用。
如果需要处理窗体上控件中的任何值,则需要捕获close事件并在其中执行操作:
另外,请参阅ZetCode教程First programs in PyQt4 toolkit(接近页面末尾)中的消息框示例。这显示了如何接受或取消关闭请求。
为了确保在进程终止时调用Python函数,通常(包括或不包括Qt;-),可以使用标准Python库的atexit模块:
出于谨慎,我建议不要为此目的使用绑定方法而不是函数——它“应该”工作,但过程的破坏阶段总是有点微妙,保存越简单越好。
当然,它没有机会运行任何终止代码——操作系统会注意到这点;-)。如果您需要处理任何崩溃,无论您必须从一个单独的“看门狗”进程来处理,这是一个非常微妙的问题。
atexit
不会触发进程的足够硬的崩溃(例如,如果进程被kill -9
终止,那么根据定义,相关问题 更多 >
编程相关推荐