PyQt5:如何将QObject移动到主线程?

时间:2018-06-01 17:25:06

标签: python multithreading qt qt5 pyqt5

我知道通常应该在主线程中创建QObject()个实例。我也知道 - 一旦创建 - 你可以将QObject()从主线程移动到另一个:

官方Qt文档可以找到here

    # 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()函数in the documentation的正确答案。这非常令人尴尬。真诚的道歉。我下次会更加小心。

1 个答案:

答案 0 :(得分:1)

当然,可以在任何线程中创建

public class FeaturedListing { public string Title { get; set; } public string Link { get; set; } public string Published { get; set; } public int Views { get; set; } public string ViewsStr { get { return string.Format("{0} visits", Views); } } public string Featured { get; set; } public string CategoryName { get; set; } } 个实例。他们是,如果没有它,Qt将毫无用处。您正在寻找的是全局应用程序对象 - 及其主题:

QObject

myObj = QObject() mainThread = QCoreApplication.instance().thread() myObj.moveToThread(mainThread) 调用之后,从当前线程调用对象上的任何非线程安全方法是未定义的行为。通过此调用,可以从目标线程安全地使用对象的非线程安全方法。