You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:54:31