multithreading - 如何调试pyqt信号/插槽连接,可能是线程问题

标签 multithreading connection pyqt signals-slots

我有以下关于我的问题的示例代码。运行此代码,我希望(如果您在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/

相关文章:

azure - 直接连接到 SQL Azure 时的登录前握手问题

php - 动态更改默认连接

python - PyQt 中字典的通用值编辑器 GUI

python - 在PyQt中取消后台任务(终止QThread)

python - 如何在 PyQt 中隐藏布局?

multithreading - 如何并行执行自定义函数公式,同时保持Google表格的可共享性和非许可性?

java - 双重检查锁定而不创建对象

java - Java线程类如何确定哪个线程?

ios - 图像加载/缓存主线程

sockets - 如何设计多节点应用网络层?