Python装饰器聚合PyQt信号
|
我经常会有很多信号,理想情况下可以一次全部处理。例如,可以将触发OpenGL窗口更新的信号汇总为一个信号。另一个示例是弄脏表中一行的信号。
理想情况下,我希望装饰器生成类似下面的代码(在START和END之间):
#!/usr/bin/env python
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from functools import wraps
import signal
import sys
signal.signal(signal.SIGINT, signal.SIG_DFL)
class AggregateManager:
def __init__(self):
self.clear()
def clear(self):
self.sent = False
self.value = 0
def aggregate(self, other):
send = not self.sent
self.sent = True
self.value += other
return send
class A(QObject):
def __init__(self):
super().__init__()
# START
self.generated_signal.connect(self.slot, Qt.QueuedConnection)
self.slot_manager = AggregateManager()
@pyqtSlot(int)
def decorated_slot(self, *args):
me = self.slot_manager
if me.aggregate(*args):
print(\"Sending\")
self.generated_signal.emit()
generated_signal = pyqtSignal()
@pyqtSlot()
def slot(self):
me = self.slot_manager
print(\"Received\", me.value)
me.clear()
# END
class B(QObject):
signal = pyqtSignal(int)
a = A()
b = B()
b.signal.connect(a.decorated_slot)
for i in range(10):
b.signal.emit(i)
app = QApplication(sys.argv)
sys.exit(app.exec_())
这样,对发送到decorated_slot的许多信号进行一次对“ 1”的调用。如何使用Python装饰器替换START和END之间的所有内容?
没有找到相关结果
已邀请:
2 个回复
绊伦欧
输出:
土投
,但是每个复选框都会发出一堆信号。但是,您可以使用下面的上下文管理器来禁用
信号的任何插槽,并在自己获得'final \'结果后立即发出
信号。