我有一个执行以下操作的python函数:
现在,在我启动PyQt QApplication之前,主线程中的time.sleep()按预期工作,但在我启动之后,time.sleep(1)立即返回。
以下是一个例子:
def run_gui_thread(self):
app = QApplication([])
self.prompt = QDialog()
self.ready = True
app.exec_()
和
def do_work(self):
print "Now is %s." % time.strftime("%H:%M:%S")
time.sleep(1)
print "Now is %s." % time.strftime("%H:%M:%S")
time.sleep(1)
print "Now is %s." % time.strftime("%H:%M:%S")
time.sleep(1)
print "Now is %s." % time.strftime("%H:%M:%S")
self.thread = threading.Thread(target = self.run_gui_thread)
self.thread.start()
time.sleep(1)
print "Now is %s." % time.strftime("%H:%M:%S")
time.sleep(1)
print "Now is %s." % time.strftime("%H:%M:%S")
time.sleep(1)
print "Now is %s." % time.strftime("%H:%M:%S")
time.sleep(1)
print "Now is %s." % time.strftime("%H:%M:%S")
输出:
Now is 10:00:56.
Now is 10:00:57.
Now is 10:00:58.
Now is 10:00:59.
Now is 10:00:59.
Now is 10:00:59.
Now is 10:00:59.
Now is 10:00:59.
任何建议?
提前致谢。
答案 0 :(得分:2)
很可能Qt的内容是使用信号(包括可能alarm()
)。根据{{1}} doco:
暂停执行当前线程达到给定的秒数。参数可以是浮点数,以指示更精确的睡眠时间。 实际暂停时间可能小于请求的时间,因为任何捕获的信号将在执行该信号的捕获程序后终止sleep()。 此外,暂停时间可能更长由于系统中其他活动的安排,所以要求任意金额。
您可能最好重新设计应用程序,以便可以使用QTimer
。