使用 lambda 和 QTimer.singleShot 调用函数时出现问题

Problem calling fucntion with lambda along with QTimer.singleShot

我试图在 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 的异步元素(例如信号和计时器)使用事件循环来执行,在您的情况下有 none,因此它失败了。解决方案是创建一个 Q{Core, Gui, }Application:

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_()