@pyqtSignature() 和@pyqtSlot() pyqt 装饰器有什么区别

What's the difference between @pyqtSignature() and @pyqtSlot() pyqt decorators

我正在尝试编写一个连接到不同 pyqt 信号的插槽。我仍然无法理解的是两个装饰器 @pyqtSignature() 和 @pyqtSlot() 之间的区别。

连接到继承自QAbstractButton的QPushButton的pyqt点击信号的示例,我使用了以下语法on_widgetName_signalName,当使用@pyqtSignature(""):

@pyqtSignature("")
def on_bn_gpx_select_file_clicked(self):  
    """
    Run when QPushButton is pressed, or do something
    """
    pass

现在使用@pyqtSlot()时

@pyqtSlot()
def on_bn_gpx_select_file_clicked(self):  
    """
    Run when QPushButton is pressed, or do something
    """
    pass

我的问题是,这两个装饰器有什么区别,什么时候应该使用@pyqtSignature 或@pyqtSlot()

谢谢

pyqtSignature 装饰器是 PyQt-4.5 中 old-style signal and slot syntax, which was replaced by the new-style signal and slot syntax 的一部分。

两个装饰器都有相同的用途,即显式地将 python 方法标记为 Qt 槽并为其指定 C++ 签名(最常见的是为了 select 特定的重载) .两个装饰器之间唯一相关的区别是 pyqtSlot 有更多 pythonic API。

永远不需要在新代码中使用 pyqtSignature - 它只是为了向后兼容才真正需要。