使用lambda以及QTimer.singleShot调用fucntion时出现问题

问题描述

我尝试借助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_()