@pyqtSignature()和@pyqtSlot()pyqt装饰器之间的区别是什么

时间:2015-05-13 12:50:23

标签: python qt pyqt pyqt4

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

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

@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()

谢谢

1 个答案:

答案 0 :(得分:3)

pyqtSignature装饰器是old-style signal and slot syntax的一部分,由PyQt-4.5中的new-style signal and slot syntax取代。

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

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