简单的信号/时隙实现
signaling的Python项目详细描述
这是什么?
signaling是signal/slot patternas的简单实现 从Qt framework知道。 它没有外部要求和100%的测试覆盖率。
安装
通常的
pip install signaling
如何使用?
假设您有一个函数,当连接的信号 发出,如下代码块所示:
defslot(arg):print("Slot called with {}".format(arg))signal=Signal(args=['arg'])signal.connect(slot)signal.emit(arg=1)# Slot called with 1
实际上,您可以将多个插槽连接到同一个信号,只要它们共享 相同的函数签名。
注意,signaling库在连接时执行一些健全性检查 插槽和发射信号。
- 连接到信号的所有插槽都必须提供与 由Signal构造函数的args参数表示。
- 必须使用与 Signal构造函数。
因此,下面的所有示例都会引发一个异常:
defslot_with_arg(arg):passdefslot_without_arg():pass# InvalidSlot: Slot 'slot_with_arg' has to callable without argumentsSignal().connect(slot_with_arg)# InvalidSlot: Slot 'slot_without_args' has to accept args ['arg'] or **kwargs.Signal(args['arg']).connect(slot_without_arg)s=Signal()s.connect(slot_without_args)# InvalidEmit: Emit has to be called without arguments.s.emit(foo=1)