在需要时是否有可能在运行时创建信号?
我在函数中做这样的事情:
class WSBaseConnector(QObject)
def __init__(self) -> None:
super(QObject, self).__init__()
self._orderBookListeners: Dict[str, pyqtSignal[OrderBookData]] = {}
def registerOrderBookListener(self, market: str, listener: Callable[[OrderBookData], None], loop: AbstractEventLoop) -> None:
try:
signal = self._orderBookListeners[market]
except KeyError:
signal = pyqtSignal(OrderBookData)
signal.connect(listener)
self._orderBookListeners[market] = signal
else:
signal.connect(listener)
如您所见,我有一个存储str和pyqtSignal对的字典。当我尝试将信号连接到监听器时,出现错误:
'PyQt5.QtCore.pyqtSignal' object has no attribute 'connect'
如果没有vars类,是否无法在运行时创建pyqtSignals?
干杯。
最佳答案
不,这是不可能的。 pyqtSignal object是一个工厂函数,它返回descriptor,因此必须在执行class语句时创建它。引用文档:
您的代码正在创建未绑定(bind)的信号对象,这就是为什么出现属性错误的原因。绑定(bind)信号和未绑定(bind)信号之间的区别与类方法完全相同。要再次引用文档: