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

3
我正在尝试编写一个与不同pyqt信号连接的插槽。我仍然无法理解@pyqtSignature()和@pyqtSlot()两个装饰器之间的区别。
例如,要连接到继承自QAbstractButton的QPushButton的pyqt clicked信号,我使用了以下语法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()这两个装饰器有什么区别?何时应该使用它们?

谢谢。


好的,文档显示@pyqtSignal()已经被弃用。使用@pyqtSlot()并忘记另一个。 (如果你问我,@pyqtSlot()应该真正被命名为@pyQtSlot(),因为这将与PyQt的命名方案保持一致。) - Boštjan Mejak
1个回答

4

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接