app 对象创建后,是不是不建议在主窗口显示之前做太多太费时间的工作?

2016-10-08 00:45:23 +08:00
 4ever911
app 对象创建后,是不是不建议在主窗口显示之前做太多太费时间的工作?

比如,我的代码如下:

def main()

//1.
app = QApplication(sys.argv)

//2.
w = MainWindow()
w.show()

sys.exit(app.exec_())


这里如果 MainWindow 的 Init 做太多事情, 哪怕是 sleep(600) ,也就是 sleep 5 分钟,程序到 sys.exit 这里会报错。
如果我把那部分读取数据的操作放到 app 创建之前,就没问题。

也就是说 sleep(600) 放在 1 没问题,放在 2 就出错。

是有什么讲究吗? 我记得以前用 MFC 的时候,也是不建议在创建主窗口的过程中做太多太费时的事情。
1686 次点击
所在节点    Python
4 条回复
justou
2016-10-08 08:57:56 +08:00
做一些会卡界面的操作放到单独线程更好, 比如在界面显示的同时要加载大量初始化数据,把加载数据的工作放在单独线程, 不阻塞界面的显示, 但是最好给出一个模态窗口提示数据正在加载,让用户稍等;
或者在主界面显示之前用闪屏提示数据正在加载,有 photoshop 的话打开看看它的界面显示过程
wangxkww
2016-10-08 14:07:24 +08:00
sys.exit 报什么错误呢?
zhuangzhuang1988
2016-10-08 16:04:24 +08:00
不可能...
4ever911
2016-10-08 21:50:52 +08:00
@zhuangzhuang1988

Please see code below:


```python

from PyQt4 import QtGui, QtCore
import sys
import time

app = QtGui.QApplication(sys.argv)

#the following line will crash the app
time.sleep(300)

w = QtGui.QDialog()
w.show()

sys.exit(app.exec_())

```python


Error Message: ICE default IO error handler doing an exit(), pid = 31805, errno = 32


In some certain occasion, when tasks that take so much time for running, such as loading a database...etc, the app crashes either. To make it simple here, I just added a short period of time sleep to the source code, which crashes the app.


Sorry about that I cannot type Chinese on my Linux Server.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/311051

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX