Python QThread:在线程仍在运行时销毁

Python QThread:在线程仍在运行时销毁,python,pyqt,qthread,Python,Pyqt,Qthread,我对python中的QThreads有问题。我想更改标签的背景色。 但是我的应用程序在启动时崩溃了。 “QThread:在线程仍在运行时销毁” 创建线程后,您没有存储对该线程的引用,这意味着在程序离开main窗口s\uuuu init\uuu一段时间后,该线程将被垃圾收集(即销毁)。您需要至少在线程运行时存储它,例如使用self.statusTh: self.statusTh = statusThread(self) self.connect(self.statusTh, SIGNAL('set

我对python中的QThreads有问题。我想更改标签的背景色。 但是我的应用程序在启动时崩溃了。 “QThread:在线程仍在运行时销毁”


创建线程后,您没有存储对该线程的引用,这意味着在程序离开
main窗口
s
\uuuu init\uuu
一段时间后,该线程将被垃圾收集(即销毁)。您需要至少在线程运行时存储它,例如使用
self.statusTh

self.statusTh = statusThread(self)
self.connect(self.statusTh, SIGNAL('setStatus'), self.st, Qt.QueuedConnection)
self.statusTh.start()

一个Qt风格的解决方案,将主窗口分配为
statusTh
的父窗口,即
super(statusThread,self)。\uuuuu init\uuuuuw(mw)
。很多。它现在工作只是为了提供信息,这基本上是一样的:在这种情况下,父线程将保留对线程实例的引用,因此它不会被垃圾收集。有人能解释一下,Qt.QueuedConnection在上面的问题中是什么意思吗?所以基本上它只是一个输入错误?对不起,我是Python新手。我不明白。我需要如何存储引用?正如我在回答中所写的那样。通过将
statusThread(self)
的实例分配给一个局部变量(即前面没有
self.
),当局部变量超出范围时(当
main window
\uuuu init\uuuuu
完成时),它将被垃圾收集。如果将引用存储在
main窗口
类的成员变量中(即前面有
self.
),当
\uuuu init\uuuu
完成时,它不会超出范围,从而导致线程对象未被垃圾收集。我将给出10票赞成票!很好的回答-节省了我很多时间和悲伤!我想你也应该把注释文本移到答案上。对不起,如果你不想存储引用,有没有办法创建一个新的对象引用(线程)?我有很多方法需要同时工作。
self.statusTh = statusThread(self)
self.connect(self.statusTh, SIGNAL('setStatus'), self.st, Qt.QueuedConnection)
self.statusTh.start()