基于Qt Signals模式的快速Python回调/事件系统
项目描述
psygnal
Psygnal(发音为"signal")是一个纯Python实现的观察者模式,具有类似Qt样式信号的API,带有可选的签名和类型检查,并支持多线程。它没有依赖项。
此库不要求或使用Qt,它仅仅实现了类似的观察者模式API。
文档
https://psygnal.readthedocs.io/
安装
pip install psygnal
conda install -c conda-forge psygnal
用法
观察者模式是一种软件设计模式,其中一个对象维护其依赖项("观察者")的列表,并通知它们任何状态变化——通常是通过调用观察者提供的回调函数。
以下是一个使用psygnal的简单示例
from psygnal import Signal
class MyObject:
# define one or more signals as class attributes
value_changed = Signal(str)
# create an instance
my_obj = MyObject()
# You (or others) can connect callbacks to your signals
@my_obj.value_changed.connect
def on_change(new_value: str):
print(f"The value changed to {new_value}!")
# The object may now emit signals when appropriate,
# (for example in a setter method)
my_obj.value_changed.emit('hi') # prints "The value changed to hi!"
更多详细信息请参阅文档!
事件驱动的数据类
信号模式的一个特别好的用法是在数据类的字段发生变化时发出信号。Psygnal 提供了一个 @evented
装饰器,当字段变化时会发出信号。它与 dataclasses
标准库中的 数据类 兼容,以及 attrs 和 pydantic
from psygnal import evented
from dataclasses import dataclass
@evented
@dataclass
class Person:
name: str
age: int = 0
person = Person('John', age=30)
# connect callbacks
@person.events.age.connect
def _on_age_change(new_age: str):
print(f"Age changed to {new_age}")
person.age = 31 # prints: Age changed to 31
有关更多详细信息,请参阅 数据类文档。
事件驱动的容器
psygnal.containers
提供了可变数据结构(dict
、list
、set
)的事件驱动版本,用于需要监视变动的场景
from psygnal.containers import EventedList
my_list = EventedList([1, 2, 3, 4, 5])
my_list.events.inserted.connect(lambda i, val: print(f"Inserted {val} at index {i}"))
my_list.events.removed.connect(lambda i, val: print(f"Removed {val} at index {i}"))
my_list.append(6) # Output: Inserted 6 at index 5
my_list.pop() # Output: Removed 6 at index 5
有关更多详细信息,请参阅 事件驱动容器文档。
基准历史
https://pyapp-kit.github.io/psygnal/
和
https://codspeed.io/pyapp-kit/psygnal
开发者
编译
虽然 psygnal
是一个纯 Python 包,但它是通过 mypyc 编译来提高性能的。要测试本地编译版本,您可以运行
make build
(这只是一个 HATCH_BUILD_HOOKS_ENABLE=1 pip install -e .
的别名)
调试
要禁用所有编译文件并运行纯 Python 版本,您可以运行
python -c "import psygnal.utils; psygnal.utils.decompile()"
要返回编译版本,运行
python -c "import psygnal.utils; psygnal.utils.recompile()"
psygnal._compiled
变量将告诉您是否正在使用编译版本。
项目详情
下载文件
下载适合您平台的文件。如果您不确定该选择哪一个,请了解有关 安装包 的更多信息。
源代码分发
构建分发
psygnal-0.11.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f9b02ca246ab0adb108c4010b4a486e464f940543201074591e50370cd7b0cc0 |
|
MD5 | 13955249103622604d4022e7d5ef94e0 |
|
BLAKE2b-256 | bcb0194cfbcb76dbf9c4a1c4271ccc825b38406d20fb7f95fd18320c28708800 |
psygnal-0.11.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 04255fe28828060a80320f8fda937c47bc0c21ca14f55a13eb7c494b165ea395 |
|
MD5 | f7c0a9e11798196604699fa0c9e27ecf |
|
BLAKE2b-256 | 6876d5c5bf5a932ec2dcdc4a23565815a1cc5fd96b03b26ff3f647cdff5ea62c |
哈希值 for psygnal-0.11.1-cp312-cp312-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1c2388360a9ffcd1381e9b36d0f794287a270d58e69bf17658a194bbf86685c1 |
|
MD5 | 18fdd3e2840f86ad36d978398e2fc3e6 |
|
BLAKE2b-256 | 1454b29b854dff0e27bdaf42a7c1edc65f6d3ea35866e9d9250f1dbabf6381a0 |
哈希值 for psygnal-0.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 885922a6e65ece9ff8ccf2b6810f435ca8067f410889f7a8fffb6b0d61421a0d |
|
MD5 | 0c320e34a78de522d736476e2c8713f9 |
|
BLAKE2b-256 | 49ad8ee3f8ac1d59cf269ae2d55f7cac7c65fe3b3f41cada5d6a17bc2f4c5d6d |
哈希值 for psygnal-0.11.1-cp312-cp312-macosx_10_16_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c7dd3cf809c9c1127d90c6b11fbbd1eb2d66d512ccd4d5cab048786f13d11220 |
|
MD5 | f9779ce01a14f5f9e4899a020fd28a3c |
|
BLAKE2b-256 | c466e1bd57a8efef6582141939876d014f86792adbbb8853bd475a1cbf3649ca |
哈希值 for psygnal-0.11.1-cp312-cp312-macosx_10_16_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0b55cb42e468f3a7de75392520778604fef2bc518b7df36c639b35ce4ed92016 |
|
MD5 | e26bfc9d64f719b40e65535e149583e0 |
|
BLAKE2b-256 | 335d9b2d8f91a9198dda6ad0eaa276f975207b1314ac2d22a2f905f0a6e34524 |
哈希值 for psygnal-0.11.1-cp311-cp311-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d77f1a71fe9859c0335c87d92afe1b17c520a4137326810e94351839342d8fc7 |
|
MD5 | 5ac5bc5f410769ff029746167f50c6ed |
|
BLAKE2b-256 | da7d24ca61d177b26e6ab89e9c520dca9c6341083920ab0ea8ac763a31b2b029 |
哈希值 for psygnal-0.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 24e69ea57ee39e3677298f38a18828af87cdc0bf0aa64685d44259e608bae3ec |
|
MD5 | 5b885a1e1b5eefb7db503479d29fe823 |
|
BLAKE2b-256 | 846f868f1d7d22c76b96e0c8a75f8eb196deaff83916ad2da7bd78d1d0f6a5df |
哈希值 for psygnal-0.11.1-cp311-cp311-macosx_10_16_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8f77317cbd11fbed5bfdd40ea41b4e551ee0cf37881cdbc325b67322af577485 |
|
MD5 | 9e7ca3576ea396df53660ce7c727785c |
|
BLAKE2b-256 | 25926dcab17c3bb91fa3f250ebdbb66de55332436da836c4c547c26e3942877e |
哈希值 for psygnal-0.11.1-cp311-cp311-macosx_10_16_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3c04baec10f882cdf784a7312e23892416188417ad85607e6d1de2e8a9e70709 |
|
MD5 | 72d6c4ed40b33585324541d2af1c97c5 |
|
BLAKE2b-256 | a6a8ed06fe70c8bd03f02ab0c1df020f53f079a6dbae056eba0a91823c0d1242 |
哈希值 for psygnal-0.11.1-cp310-cp310-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c392f638aac2cdc4f13fffb904455224ae9b4dbb2f26d7f3264e4208fee5334d |
|
MD5 | c70f68f3d719056e30b6094d23ce6fd0 |
|
BLAKE2b-256 | a5938d91aef01261123640406d132add52973e16d74b6c6e63b6fb54cc261f1e |
哈希值 for psygnal-0.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7676e89225abc2f37ca7022c300ffd26fefaf21bdc894bc7c41dffbad5e969df |
|
MD5 | 61dce6938f385e9d711a63e043b7dfe7 |
|
BLAKE2b-256 | c33fae610fd14cdbae8735344abfc7f67c76ff8bcf18e0e3c5f26a1ca590014e |
哈希值 for psygnal-0.11.1-cp310-cp310-macosx_10_16_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cec87aee468a1fe564094a64bc3c30edc86ce34d7bb37ab69332c7825b873396 |
|
MD5 | 88a59d69128bc8c73a1165b4d63d898b |
|
BLAKE2b-256 | 660a52b7e40f4c7ec82c9809c62e568ee9c117dd911d3f6f562ac3007a4ad969 |
哈希值 for psygnal-0.11.1-cp310-cp310-macosx_10_16_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8d9187700fc608abefeb287bf2e0980a26c62471921ffd1a3cd223ccc554181b |
|
MD5 | 14af5938b87f1c5e3733b533ef49a241 |
|
BLAKE2b-256 | 92bf2dee9491518402489909c0613004d3a0f79672f27ce16aae774c5addc506 |
哈希值 用于 psygnal-0.11.1-cp39-cp39-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 09c75d21eb090e2ffafb32893bc5d104b98ed237ed64bebccb45cca759c7dcf4 |
|
MD5 | 46b02b9bea248e9fea559eb6f53ab6ef |
|
BLAKE2b-256 | b5e3ae3b178f0c0f9528a9b957f302800d65ddc6fcd47f18724006de6414fa85 |
哈希值 用于 psygnal-0.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 713dfb96a1315378ce9120376d975671ede3133de4985884a43d4b6b332faeee |
|
MD5 | 948d225173a2ba90dd95f786866e5bc0 |
|
BLAKE2b-256 | bc0e8bfb65ad186f36a52b2bfe6193f37f3b792f548d1ccfa302b5859bd8c648 |
哈希值 用于 psygnal-0.11.1-cp39-cp39-macosx_10_16_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c05f474b297e2577506b354132c3fed054f0444ccce6d431f299d3750c2ede4b |
|
MD5 | 59d72615caad62c96e7a359691d5f2c5 |
|
BLAKE2b-256 | b0f8db318ba1b1e1e31455e62b83fcf754a97d061ab59a3e1c11c612abe57e48 |
哈希值 用于 psygnal-0.11.1-cp39-cp39-macosx_10_16_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c9dde42a2cdf34f9c5fe0cd7515e2ab1524e3207afb37d096733c7a3dcdf388a |
|
MD5 | 44d00201b679bd8657dd8f82e644207d |
|
BLAKE2b-256 | 05bd134c50dea67e1adf510e89c055bc69ea1e6487dd68af10840c9443a0988d |
哈希值 用于 psygnal-0.11.1-cp38-cp38-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fe70023fe4cf8bb6a0f27e89fd8f1cf715893dfb004b790937a0bc59d9071aab |
|
MD5 | c283f9f7740469c3ff1e644422d0a2be |
|
BLAKE2b-256 | 2276b0d4f0eaadd0414755e91d8d744f8474519ee13926543dce969b9a5bba62 |
哈希值 用于 psygnal-0.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dc260f19349485bd58e276e731cf8be40d8891cc6ff1c165762bd2c1b84f1ff7 |
|
MD5 | be1f957bcc3db2fd7479d2fc9150b5dc |
|
BLAKE2b-256 | 4fb47c94454dd1a9d9b5980d9b8053b054c1f246a3adf433fbde691974e8cf76 |
哈希值 用于 psygnal-0.11.1-cp38-cp38-macosx_10_16_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 36cd667dd1d3e70e3fd970463a8571436e5ae58f02cc05a4a1669e6d8550d263 |
|
MD5 | ea4e81f8018650abfcb179699f17031c |
|
BLAKE2b-256 | 33a7fdfa16c98b45b5823c383bc1fe5e038af01392331aa1a4e8f3a976633cc9 |
哈希值 用于 psygnal-0.11.1-cp38-cp38-macosx_10_16_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2deec4bf7adbb9e3ef0513ae8b9e98bb815eb62b76a7bf1986f1d6ed626c8784 |
|
MD5 | edb51c3cdba06cec899c4fa6b6e94da4 |
|
BLAKE2b-256 | a0144c3f4b9c5e723b7afd741dc529fa350d2afb584ec0ef8eda7f70436d3831 |