【问题标题】:Pyqtgraph RemoteGraphicsView and connecting signalsPyqtgraph RemoteGraphicsView 和连接信号
【发布时间】:2014-10-30 18:05:23
【问题描述】:

所以我目前在我的应用程序中使用 RemoteGraphicsView 并且我已经包含了一个 LinearRegionItem 进入视野。我正在尝试将信号“sigRegionChanged”连接到我的应用程序中的一个函数,但根据我的尝试,我会收到以下错误。

新型信号/插槽

my_region.sigRegionChanged.connect(self.my_function)

我收到来自处理程序调用的以下错误

_pickle.PicklingError: Can't pickle : 属性查找 builtins.method 失败

旧式

self.connect(spot_area, QtCore.SIGNAL('sigRegionChanged'), self.spot_adjusted)

获取关于 spot_area 是 ObjectProxy 的错误。

有什么想法吗?

【问题讨论】:

    标签: proxy pyqt pyqtgraph


    【解决方案1】:

    这是因为您试图将回调函数直接发送到远程进程,而 pickle 不知道如何序列化函数。相反,您需要手动为您的回调创建一个 代理 并发送它:

    proxy = pg.multiprocess.proxy(self.my_function, callSync='off', autoProxy=True) 
    myRegion.sigRegionChanged.connect(proxy)
    

    这里还有一些其他的微妙之处:

    • callSync 参数通过告诉远程进程在调用回调时等待返回值来提高性能。
    • 需要autoProxy 参数,因为当远程进程调用回调时,它会尝试将LinearRegionItem 作为参数发送(因为这是信号的第一个参数)。使用autoProxy=True 指示远程进程通过代理发送它,而不是尝试腌制它(这会失败)。

    【讨论】:

    • 谢谢!我很快就会试试这个。所以 autoProxy 是我猜的关键之一。我之前尝试过做多进程代理,但我收到了同样的错误。出于我的教育和好奇心,方法没有被排除在外是有原因的吗?
    • 我想不出一个好的理由。可能autoProxy应该默认启用..
    猜你喜欢
    • 2020-02-19
    • 2012-10-15
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多