我不能在我的pyqt应用程序中使用time.sleep因为冻结了GUI线程,因此GUI将在此期间完全冻结.我一直在寻找一种方法来处理这个问题.
我尝试使用QTimer,但似乎需要将它们链接到另一个函数?比如等待十秒然后运行一些功能.有没有办法让它等待然后继续当前功能?谢谢!
def num(self):
for i in range(1,999):
print i
#Add some sleep here
def testSleep(self):
QtCore.QTimer.singleShot(2000, self.num)
Run Code Online (Sandbox Code Playgroud)
实际上我正在寻找time.sleep替代在pyqt中使用而不使用任何线程概念.
我想出的解决方案是:
from PyQt4 import QtTest
QtTest.QTest.qWait(msecs)
Run Code Online (Sandbox Code Playgroud)
这类似于time.sleep使GUI响应.
谢谢您的回答.
也许它可以做得更好,但你总是可以使用singleShot延迟运行函数,并lambda使用参数运行函数。
import sys
from PyQt4 import QtGui, QtCore
#def num(self, i):
def num(i):
print i
i += 1
if i < 999:
# run again after 2000ms with argument
QtCore.QTimer.singleShot(2000, lambda:num(i))
#QtCore.QTimer.singleShot(2000, lambda:self.num(i))
app = QtGui.QApplication(sys.argv)
# run first time with start argument
num(1)
#QtCore.QTimer.singleShot(2000, lambda:num(1))
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6283 次 |
| 最近记录: |