PySide6信号传入装饰器后无法正常发射的问题求助
PySide6信号传入装饰器后无法正常发射的问题求助
我在Python 3.11中写了一个装饰器,想在被装饰的函数调用时发送信号,把函数的调用参数编码进去,但运行时遇到了问题,想请大家帮忙排查下。
我的代码实现
首先是装饰器的代码:
def register_action(signal=None): def decorator(func): def wrapper(self, *args, **kwargs): # self是实例方法的第一个参数 result = func(self, *args, **kwargs) history = {'function': func.__name__, 'args': args, 'kwargs': kwargs } try: signal.emit(history, False) except Exception as e: self.logger.info(f'Unable to log tab action: {str(e)}') return result return wrapper return decorator
信号是在类的顶部定义的,我的类继承关系是MetadataView -> MetaView -> QWidget,代码如下:
class MetadataView(MetaView): logger = logging.getLogger(__name__) update_tab_action_history = Signal(object, bool) # 其他类实现代码...
装饰器的使用方式:
@register_action(signal=update_tab_action_history) def _overlay_plot(self, parameters): # 函数内部实现...
遇到的错误
当代码执行到信号发射的逻辑时,抛出了这个错误:
'PySide6.QtCore.Signal' object has no attribute 'emit'
我确定PySide6.QtCore.Signal本身是有emit方法的,所以肯定是哪里的逻辑出了问题... 有没有大佬能给点排查方向或者解决建议?
备注:内容来源于stack exchange,提问作者KBriggs
相关产品推荐
相关产品推荐

