Python @pyqtSlot()导致在与其他装饰器一起使用时调用错误的处理程序方法

Python @pyqtSlot()导致在与其他装饰器一起使用时调用错误的处理程序方法,python,pyqt,decorator,Python,Pyqt,Decorator,我的问题与本主题的前一个问题相关: 问题是,如果我用同一组decorator创建更多的方法,每个信号都调用同一个,这有点奇怪。示例如下: signal_1.connect(fun_1) signal_2.connect(fun_2) @pyqtSlot() @handle_exceptions def fun_1(): print('aaaaa') @pyqtSlot() @handle_exceptions def fun_2(): print('bbbbb') sign

我的问题与本主题的前一个问题相关:

问题是,如果我用同一组decorator创建更多的方法,每个信号都调用同一个,这有点奇怪。示例如下:

signal_1.connect(fun_1)
signal_2.connect(fun_2)

@pyqtSlot()
@handle_exceptions
def fun_1():
    print('aaaaa')

@pyqtSlot()
@handle_exceptions
def fun_2():
    print('bbbbb')

signal_1.emit()
signal_2.emit()
输出:

aaaaa
aaaaa

创建装饰器时,它将函数作为参数接收,PyQt使用该函数的名称作为指向将用于插槽的实际函数的指针,除非给出特定名称,否则它实际上会返回该函数的包装器

由于对同一个包装器func_包装器使用插槽装饰器,PyQt认为它们是同一个函数,并覆盖上一个函数或忽略下一个函数,我不确定:我得到了不同的结果,因为有时调用第一个函数,其他函数调用第二个函数

这与eyllanesc在中的解释有关,我认为这是更正确的方法

尽管如此,另一种解决方案可能是将唯一名称设置为插槽的参数:

    @pyqtSlot(name='fun_1')
    @handle_exceptions
    def fun_1():
        print('aaaaa')

    @pyqtSlot(name='fun_2')
    @handle_exceptions
    def fun_2():
        print('bbbbb')

创建装饰器时,它将函数作为参数接收,PyQt使用该函数的名称作为指向将用于插槽的实际函数的指针,除非给出特定名称,否则它实际上会返回该函数的包装器

由于对同一个包装器func_包装器使用插槽装饰器,PyQt认为它们是同一个函数,并覆盖上一个函数或忽略下一个函数,我不确定:我得到了不同的结果,因为有时调用第一个函数,其他函数调用第二个函数

这与eyllanesc在中的解释有关,我认为这是更正确的方法

尽管如此,另一种解决方案可能是将唯一名称设置为插槽的参数:

    @pyqtSlot(name='fun_1')
    @handle_exceptions
    def fun_1():
        print('aaaaa')

    @pyqtSlot(name='fun_2')
    @handle_exceptions
    def fun_2():
        print('bbbbb')
你必须使用更多关于需要阅读答案的信息

你必须使用更多关于需要阅读答案的信息


我自己永远也弄不明白。谢谢我自己永远也弄不明白。谢谢