2
我有我的问题的以下一段代码示例。运行这个,我期望(如果你在lineedit中输入的东西)A.updateValue插槽将被调用两次,从而显示'a.updatevalue called'和'a2.updatevalue called'
但是,它只被调用一次,即self.a2对象,而不是self.a对象,后者从工作线程发送到GUI线程。我该如何解决这个问题,以便这段代码也触发self.a对象的插槽?如何调试pyqt信号/插槽连接,可能是线程问题
谢谢 大卫
import os, sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class A(QObject):
def __init__(self, name):
QObject.__init__(self)
self.name = name
def updateValue(self, value):
print(self.name + ".updatevalue called")
class workerthread(QThread):
def __init__(self, parent=None):
QThread.__init__(self, parent)
def run(self):
a = A('a')
QObject.emit(self, SIGNAL("mySignal"), a)
class Main(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.centralwidget = QWidget(self)
self.hbox = QHBoxLayout()
self.centralwidget.setLayout(self.hbox)
def update(self, a):
self.a = a
edit = QLineEdit("", self)
self.hbox.addWidget(edit)
edit.textChanged.connect(self.a.updateValue)
self.a2 = A('a2')
edit.textChanged.connect(self.a2.updateValue)
if __name__ == "__main__":
app = QApplication(sys.argv)
gui = Main()
worker = workerthread()
worker.connect(worker, SIGNAL('mySignal'), gui.update)
worker.start()
gui.show()
sys.exit(app.exec_())
你好,谢谢你的反应。但是,在我的生产代码中,有多个A对象,并且我只在运行时知道将创建多少个A,因此在创建workerThread时定义所有A不是一种选择。任何想法如何解决这个问题? – 2012-03-12 11:29:27
我认为问题在于'self.a.updateValue'SLOT与'textChanged'SIGNAL不在同一个线程中。尝试在发出'mySignal'之前添加它:'a.moveToThread(QApplication.instance()。thread())' – 2012-03-12 18:11:23