所以我目前在我的应用程序中使用了RemoteGraphicsView,并且我已经包含了一个LinearRegionItem 进入视野。我试图连接信号" sigRegionChanged"到我的应用程序中的函数,但我得到以下错误取决于我尝试。
新风格信号/插槽
my_region.sigRegionChanged.connect(self.my_function)
我收到来自处理程序调用的以下错误
_pickle.PicklingError:无法发现:属性查找builtins.method失败
旧式
self.connect(spot_area, QtCore.SIGNAL('sigRegionChanged'), self.spot_adjusted)
获取有关spot_area是ObjectProxy的错误。
有什么想法吗?
答案 0 :(得分:2)
这是因为您尝试将回调函数直接发送到远程进程,并且pickle不知道如何序列化函数。相反,您需要手动为回调创建代理并发送该代码:
proxy = pg.multiprocess.proxy(self.my_function, callSync='off', autoProxy=True)
myRegion.sigRegionChanged.connect(proxy)
这里还有其他一些细微之处:
callSync
参数通过告诉远程进程在调用回调时不等待返回值来提高性能。autoProxy
参数,因为当远程进程调用回调时,它将尝试发送LinearRegionItem
作为参数(因为这是信号的第一个参数)。使用autoProxy=True
指示远程进程通过代理发送它而不是试图腌制它(这会失败)。