У меня есть следующий пример кода моей проблемы. Запустив это, я ожидал бы, что (если вы введете что-то в lineedit), слот A.updateValue будет вызван дважды и, таким образом, отобразятся «a.updatevalue named» и «a2.updatevalue с именем«
Однако он вызывается только один раз, а именно для объекта self.a2, а не для объекта self.a, последний, который отправляется из рабочего потока в поток GUI. Как я могу это исправить, чтобы этот фрагмент кода также запускал слот для объекта self.a?
Спасибо,
David
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_())