PySide - QThread正在运行但没有进入连接到信号的插槽'已启动'

时间:2014-08-20 12:53:16

标签: python qt pyside qthread

我以为我已经在Qt中读到了关于线程的所有内容,但显然我错了。我已经坚持了一段时间了,所以我非常感谢你的帮助。

所以,我创建了一个在__init__方法中启动线程的类:

class MyClass(object):
    def __init__(self):
        (...)

        self.thread = QtCore.QThread(parent)
        worker = Worker()
        QtCore.QObject.connect(self.thread, QtCore.SIGNAL('started()'), worker,
                QtCore.SLOT('doWork()'))
        QtCore.QObject.connect(worker, QtCore.SIGNAL('finished()'), self.thread,
                QtCore.SLOT('quit()'))
        QtCore.QObject.connect(worker, QtCore.SIGNAL('finished()'), worker,
                QtCore.SLOT('deleteLater()'))
        QtCore.QObject.connect(self.thread, QtCore.SIGNAL('finished()'),
                self.thread, QtCore.SLOT('deleteLater()'))
        worker.moveToThread(self.thread)
        self.thread.start()

工人类看起来像这样:

class Worker(QtCore.QObject):
    (some signals)

    def doWork(self):
        print "doing my work"

问题是我的doWork插槽永远不会被执行,尽管线程正在运行。

创建MyClass实例后,让我们说:     obj = MyClass()

我可以致电:     obj.thread.isRunning()

返回True。

我认为信号已经开始'没有发出,因为立即退出创建线程的方法(当我在启动线程后添加睡眠时,它进入doWork槽)。我想知道如何妥善处理这种情况。

如果我没有清楚地解释我的问题,请告诉我。 提前谢谢大家的帮助。

1 个答案:

答案 0 :(得分:4)

MyClass构造函数返回后,您的worker正在进行垃圾回收。让worker成为MyClass的成员,使其超出构造函数。

self.worker = Worker()