这是一个使用PySide的简单gui计时器:
#!/usr/bin/env python3
import sys
from PySide.QtCore import *
from PySide.QtGui import *
import time
app = QApplication(sys.argv)
try:
message = """
<pre>
Alert! Alert! Alert!
Alert! Alert! Alert!
Alert! Alert! Alert!
Alert! Alert! Alert!
Alert! Alert! Alert!
Alert! Alert! Alert!
</pre>
"""
now = QTime.currentTime()
due = now.addSecs(2)
if not due.isValid():
raise ValueError
dueMs = now.msecsTo(due)
except:
pass
label = QLabel("<b>" + message + "</b>")
label.setWindowFlags(Qt.SplashScreen)
QTimer.singleShot(dueMs, label.show)
QTimer.singleShot(3000, app.quit)
app.exec_()
这是另一个同样有效的版本:
#!/usr/bin/env python3
import sys
from PySide.QtCore import *
from PySide.QtGui import *
import time
app = QApplication(sys.argv)
try:
message = """
<pre>
Alert! Alert! Alert!
Alert! Alert! Alert!
Alert! Alert! Alert!
Alert! Alert! Alert!
Alert! Alert! Alert!
Alert! Alert! Alert!
</pre>
"""
now = QTime.currentTime()
due = now.addSecs(2)
if not due.isValid():
raise ValueError
except:
pass
while QTime.currentTime() < due:
time.sleep(0.2)
label = QLabel("<b>" + message + "</b>")
label.setWindowFlags(Qt.SplashScreen)
label.show()
QTimer.singleShot(3000, app.quit)
app.exec_()
不同之处在于第二个版本使用time.sleep,而第一个版本使用QTimer.singleShot作为时间。其中一个是否优先于另一个?如果是这样,为什么?
答案 0 :(得分:0)
其中一个是否优先于另一个?如果是这样,为什么?
回答:说出对错是很难的。我的意见,为了您的应用程序的使用目的。
让我们说,情况:&#34;开始前加载数据&#34;
您必须将大量数据加载到主应用程序中。完成加载需要很长时间。关键是你在开始之前完成了负载。所以在你的second version
中使用它应该是好的。但是如果你不等待这个延迟,你应该创建线程来加载数据并触发你的标签直到完成加载。和first version
一样(看起来就像QThread一样)。
在其他情况下:&#34;在应用程序中保存数据&#34;
您必须将主应用程序中的海量数据保存到文件中。编写文件需要时间。如果您使用first version
。当用户尝试保存时,应用程序将启动以保存文件。保存完成之前,您的应用程序无法执行任何操作(例如Ubuntu中的黑色透明屏幕,挂起或冻结)。但是如果使用second version
,则必须在开始保存,取消和完成保存文件时进行处理。对应用程序的响应非常困难但很好。