【发布时间】:2013-03-20 03:03:16
【问题描述】:
我在 python 中遇到 QThreads 问题。我想更改标签的背景颜色。 但是我的应用程序在启动时崩溃了。 “QThread:在线程仍在运行时被销毁”
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
statusTh = statusThread(self)
self.connect(statusTh, SIGNAL('setStatus'), self.st, Qt.QueuedConnection)
statusTh.start()
def st(self):
if self.status == 'ON':
self.ui.label.setStyleSheet('background-color:green')
else:
self.ui.label.setStyleSheet('background-color:red')
class statusThread(QThread):
def __init__(self, mw):
super(statusThread, self).__init__()
def run(self):
while True:
time.sleep(1)
self.emit(SIGNAL('setStatus'))
if __name__ == "__main__":
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
【问题讨论】:
-
一个Qt风格的解决方案,指定主窗口为
statusTh的父窗口,即super(statusThread, self).__init__(mw)。 -
非常感谢。它现在正在工作
-
仅供参考,这基本上是一样的:在这种情况下,父级将保留对线程实例的引用,因此不会被垃圾回收。
-
谁能解释一下,Qt.QueuedConnection 在上面的问题中是什么意思?
-
所以基本上这只是一个错字?