【问题标题】:What's the difference between @pyqtSignature() and @pyqtSlot() pyqt decorators@pyqtSignature() 和 @pyqtSlot() pyqt 装饰器有什么区别
【发布时间】:2023-04-03 18:06:01
【问题描述】:

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

谢谢

【问题讨论】:

  • 好吧,文档说 @pyqtSignal() 已弃用。使用 @pyqtSlot() 并忘记另一个。 (如果你问我,@pyqtSlot() 应该真正命名为 @pyQtSlot(),因为这与 PyQt 的命名方案一致。)

标签: python qt pyqt pyqt4


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-01-09
    • 2020-02-21
    • 2023-03-21
    • 2016-09-16
    • 2011-02-04
    • 2018-07-19
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多