twallpasser 2015-06-17 09:35 采纳率: 0%
浏览 675

blinker的消息机制,使用eclipse+pydev,消息响应函数无法调用

请教各位大神有没有知道这个怎么解决。
module1大致结构如下,是一个串口类,定义了一个串口URC数据上报事件。
import serial,blinker
class ATcls(serial.Serial):
onURCget=blinker.signal('onURCget')
def init(self):
pass
def sendevent(self):
ATcls.onURCget.send(self)
def onevent(self):
print 'OK'

module2调用module1
import module1
@module1.ATcls.onURCget.connect
def test(sender):
sender.onevent()
comm=module1.ATcls()
comm.sendevent()

照理应该是会调用类的onevent()方法打印 "OK",但是实际执行没有,使用pydev的交互式解释器时是可以成功的,这是为什么?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-04 00:06
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于在模块1中没有正确地注册了@module1.ATcls.onURCget.connect。在PyDev中,你可以直接通过Python表达式来连接信号和回调函数,但你需要确保你正在运行正确的模块,并且它已经被正确地导入到你的环境中。

    如果你想要将信号与特定的函数关联起来,你应该在Python表达式的右侧使用一个connect装饰器。例如:

    @module1.ATcls.onURCget.connect
    def handle_event(sender):
        sender.onevent()
    

    在这个例子中,当onURCget信号被触发时,handle_event函数会被调用并传入发送者(sender)作为参数。这将使sender对象能够访问它的onevent()方法并打印"OK"。

    注意:connect装饰器必须位于信号定义之前。如果它们在同一行,请确保它们之间有一个空格或换行符。

    评论

报告相同问题?