问题描述
我尝试借助QTimer.singleShot函数调用具有延迟时间的函数,但未产生任何输出。
from PyQt5.QtCore import QTimer
list1=[1,2,3,4,5]
delay = 2500
def calling_func():
if list1:
list_item = list1.pop()
QTimer.singleShot(delay,lambda: target_func(list_item))
def target_func(list_item):
print("fid= ",list_item)
QTimer.singleShot(delay,calling_func)
calling_func()
我希望在target_func中一一输出list_item值,但是未调用该函数。
解决方法
Qt的异步元素(例如信号和计时器)使用eventloop来执行,在您的情况下,它们没有,因此失败。解决方案是创建一个Q {Core,Gui,}应用程序:
from PyQt5.QtCore import QCoreApplication,QTimer
list1=[1,2,3,4,5]
delay = 2500
def calling_func():
if list1:
list_item = list1.pop()
QTimer.singleShot(delay,lambda: target_func(list_item))
def target_func(list_item):
print("fid= ",list_item)
QTimer.singleShot(delay,calling_func)
app = QCoreApplication([])
calling_func()
app.exec_()