python - 无法将参数传递给 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 之外定义的
解决方案
我的问题是通过传入self
QThread() 并func
从 lambda 中删除来解决的。
在这种情况下,self
未定义,但在 QMainWindow 中运行此代码时,没有错误。
我不知道为什么传入self
QThread 可以解决问题,所以如果有人知道原因,最好留下评论来解释它,以便我稍后将其添加到答案中。
变化:
替换
thread = QThread()
为thread = QThread(self)
替换
thread.started.connect(lambda func: object.begin("argument"))
为thread.started.connect(lambda: object.begin("argument"))
推荐阅读
- python - 将帐户身份验证方法从用户名更改为电子邮件
- java - 在 Spring Boot 集成中的 MqttPahoMessageHandler 和 MqttPahoMessageDrivenChannelAdapter 之间共享相同的 MQTT 客户端实例
- php - 如何使用 API 在 Woocommerce 中获取 BACS 帐户详细信息?
- node.js - 从我的 nodejs 访问代理服务器地址?
- api - 如何获取 Aliseeks api 密钥?以及如何登录 Aliseeks?
- docker - 无法访问 vagrant 机器上的 vagrant 文件夹(旧文件句柄)
- apache-kafka - KSQL 是否支持插入数组值?
- c - 如何排除“for”中的数字
- android - 您需要在不更改代码的情况下使用 Theme.AppCompat 主题错误
- ios - 动画在设备的 Xcode 11 版本中不起作用