[英]PyQt5: How to move a QObject to the main thread?
我知道通常应该在主线程中创建QObject()
实例。 我也知道-创建后-您可以将QObject()
从主线程移动到另一个线程:
官方的Qt文档可以在这里找到
# Worker-object approach
# -----------------------
# Note: these codelines execute in the main thread.
workerThread = QThread()
workerObj = WorkerObj()
workerObj.moveToThread(workerThread)
目前,我正面临完全相反的问题。 我有一个QObject()
在(非主) QThread
实例化。 我想将其移至主线程,如下所示:
# Move a QObject() to the main thread
# ------------------------------------
# Note: these codelines execute in some QThread
myObj = QObject()
myObj.moveToThread(threading.main_thread())
我收到以下错误:
TypeError:moveToThread(self,QThread):参数1具有意外的类型'_MainThread'
我可能会收到错误,因为主线程不是真正的QThread
。 我应该怎么做才能使其正常工作?
编辑:
显然答案在moveToThread()
函数的文档中是正确的 。 这真令人尴尬。 诚挚的歉意。 下次我会更加小心。
当然,可以在任何线程中创建QObject
实例。 而且他们是,没有它,Qt将毫无用处。 您正在寻找的是全局应用程序对象-及其线程:
myObj = QObject()
mainThread = QCoreApplication.instance().thread()
myObj.moveToThread(mainThread)
在moveToThread
调用之后,从当前线程调用对象上的任何非线程安全方法都是未定义的行为。 超过此调用之后,只能从目标线程安全地使用对象的非线程安全方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.