fcc*_*lho 6 python user-interface pyqt signals-slots pyqt4
我正在为我的应用程序收集使用情况统计信息,包括每个会话持续多少.但是,我似乎无法保存此信息,因为我尝试的信号实际上没有成功调用我的report_session函数.
这是我已经尝试过的信号:
这些信号永远不会被释放,或者应用程序在此之后不能长时间运行以运行任何其他信号.这是我的主要内容:
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_())
Run Code Online (Sandbox Code Playgroud)
把代码之间app.exec_和sys.exit:
ret = app.exec_()
# Your code that must run when the application closes goes here
sys.exit(ret)
Run Code Online (Sandbox Code Playgroud)
为了确保在进程终止时调用 Python 函数,通常(无论是否涉及 Qt;-),您可以使用标准 Python 库的atexit模块:
import atexit
def whatever(): ...
atexit.register(whatever)
Run Code Online (Sandbox Code Playgroud)
出于谨慎考虑,我建议不要为此目的使用绑定方法而不是函数——它“应该”工作,但进程的销毁阶段总是有些微妙,并且越简单越好。
atexit当然,不会触发进程的足够严重的崩溃(例如,如果进程被 杀死kill -9,那么根据定义,它不会有机会运行任何终止代码)——操作系统会看到这一点;- )。如果您需要处理任何崩溃,无论您必须从一个单独的“看门狗”过程中处理多么困难,这是一个非常微妙的问题。
Mark Byers发布的方法将在主窗口小部件关闭后运行,这意味着其控件将不再可用。
如果需要使用表单上控件中的任何值,则需要捕获close事件并在此处进行工作:
class MainWidget(QtGui.QWidget):
#...
def closeEvent(self, event):
print "closing PyQtTest"
self.SaveSettings()
# report_session()
Run Code Online (Sandbox Code Playgroud)
另外,请参见ZetCode教程PyQt4工具箱中的“第一个程序”中的“消息框”示例(在页面末尾)。这显示了如何接受或取消关闭请求。
| 归档时间: |
|
| 查看次数: |
8243 次 |
| 最近记录: |