我有以下关于我的问题的示例代码。运行此代码,我希望(如果您在lineedit中键入内容)A.updateValue插槽将被调用两次,从而显示“a.updatevalue被调用”和“a2.updatevalue被调用”
但是,它仅被调用一次,即是针对self.a2对象,而不是针对self.a对象,后者是从工作线程发送到GUI线程的。如何解决此问题,使这段代码也触发self.a对象的插槽?
谢谢,
大卫
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
时定义workerThread
class workerthread(QThread):
def __init__(self, parent=None):
QThread.__init__(self, parent)
self.a = A('a')
def run(self):
QObject.emit(self, SIGNAL("mySignal"), self.a)
关于multithreading - 如何调试pyqt信号/插槽连接,可能是线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9660276/