0

所以我目前在我的应用程序中使用 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 的错误。

有任何想法吗?

4

1 回答 1

2

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

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

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

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