首页 > 解决方案 > 无法将参数传递给 QThread

问题描述

我想在调用 QThread 时将参数传递给它,但由于某种原因,我总是收到此错误: QThread: Destroyed while thread is still running

这是我的代码:

from PySide6.QtCore import QObject, Qt, QThread, Signal

class sendEmailObject(QObject):
    finished = Signal()
    def begin(self, arg):
        dostuff()
        self.finished.emit()

def applic():
    thread = QThread()
    object = sendEmailObject()
    object.moveToThread(thread)
    object.finished.connect(thread.quit)
    thread.started.connect(lambda func: object.begin("argument"))
    thread.start()

applic()

编辑:这显然不是我的完整代码(因为它大约有 1000 行)。这只是我写来解释我的问题的东西。“应用”函数是在我原始代码的 QMainWindow 中定义的。线程类“sendEmailObject”是在 QMainWindow 之外定义的

标签: pythonpyside6

解决方案


我的问题是通过传入selfQThread() 并func从 lambda 中删除来解决的。

在这种情况下,self未定义,但在 QMainWindow 中运行此代码时,没有错误。

我不知道为什么传入selfQThread 可以解决问题,所以如果有人知道原因,最好留下评论来解释它,以便我稍后将其添加到答案中。

变化:

  1. 替换thread = QThread()thread = QThread(self)

  2. 替换thread.started.connect(lambda func: object.begin("argument"))thread.started.connect(lambda: object.begin("argument"))


推荐阅读