跳转到主要内容

简单的信号/槽实现

项目描述

https://img.shields.io/pypi/v/signaling.svg?style=flat-square https://img.shields.io/travis/mdomke/signaling/master.svg?style=flat-square https://img.shields.io/pypi/l/signaling.svg?style=flat-square https://img.shields.io/coveralls/mdomke/signaling.svg?style=flat-square

这是什么?

signaling 是一个简单的信号/槽模式的实现,正如从 信号与槽模式 中所知的,它是从 Qt 框架 中获得的。它没有外部要求,并且有100%的测试覆盖率。

安装

常规方法

pip install signaling

如何使用它?

假设您有一个函数,每当连接的信号被发射时都应该调用它,如下面的代码块所示

def slot(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构造函数中指定的完全相同的参数进行emit-调用。

因此,以下所有示例都会引发异常

def slot_with_arg(arg):
  pass

def slot_without_arg():
  pass

# InvalidSlot: Slot 'slot_with_arg' has to callable without arguments
Signal().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)

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

signaling-1.0.0.tar.gz (11.9 kB 查看哈希值)

上传时间 源代码

构建分发

signaling-1.0.0-py2.py3-none-any.whl (5.7 kB 查看哈希值)

上传时间 Python 2 Python 3

由支持