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

Eri*_*ick 3 python qt pyqt signals-slots pyqt4

我试图编写一个连接到不同 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
Run Code Online (Sandbox Code Playgroud)

现在使用 @pyqtSlot() 时

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

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

谢谢

ekh*_*oro 5

装饰pyqtSignature器是旧式信号和槽语法的一部分,在 PyQt-4.5 中被新式信号和槽语法取代。

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

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