如何将 PyQt 插槽从后台线程连接到 gui 线程

Posted

技术标签:

【中文标题】如何将 PyQt 插槽从后台线程连接到 gui 线程【英文标题】:How to connect PyQt slot from background thread to gui thread 【发布时间】:2011-01-16 22:14:03 【问题描述】:

我希望以 Python 方式将后台线程中的信号连接到 GUI 线程中的插槽。

我有以下代码sn-p。

from PyQt4.QtCore import * 
class CompanyPresenter(QObject): 
    fieldChangeSignal = pyqtSignal(str, str)
    def __init__(self,model,view):
        self.model = model       # a CompanyModel 
        self.view = view         # a CompanyView
        self.fieldChangeSignal.connect(view.setField)

我收到此错误(在连接线上)

TypeError: pyqtSignal 必须绑定到 QObject,而不是 'CompanyPresenter'

但是 CompanyPresenter 继承自 QObject,所以它是一个 QObject。怎么了?

(我希望 Presenter 和 GUI 最终在不同的线程中运行,但我还没有做到这一点。还没有线程)。

【问题讨论】:

【参考方案1】:

你忘了这个:

def __init__(self,model,view):
    super(CompanyPresenter, self).__init__() # this!!!!!!!!!

添加这将工作。(测试)

【讨论】:

以上是关于如何将 PyQt 插槽从后台线程连接到 gui 线程的主要内容,如果未能解决你的问题,请参考以下文章

PyQt 和 QML:如何在一个插槽或函数中处理多个信号

PyQt在连接到信号时将参数发送到插槽

如何将函数连接到主线程外的 PyQt 信号

Pyqt将插槽连接到具有默认参数的函数而没有lambda [重复]

从 PyQt GUI 连接到串口

是否可以将模型对象的插槽连接到 QT4 -Designer 中的 GUI?