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

标签 python qt pyqt pyqt4

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

连接到继承自 QAbstractButton 的 QPushButton 的 pyqt clicked 信号的示例,我在使用 @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()

谢谢

最佳答案

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

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

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

关于python - @pyqtSignature() 和@pyqtSlot() pyqt 装饰器有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30215328/

相关文章:

c++ - 当 QGraphicsView 或 QWidget 完成绘制或渲染时是否存在信号或事件?

python - Qt 设计器创建的 QWidget 未被识别为 QWidget

Python:在不涉及鼠标的任何事情上使用 .bind() 时遇到问题

python - 尝试构建一个程序来组织安全数据并将其显示在图表中

python - 你如何评估 Python 中数组的某个部分?

c++ - 使用 OpenGL 绘图,无需杀死 CPU 且无需并行化

python - 何时使用反向内置而不是列表切片

c++ - Qt 的持续构建系统

python - PyQt4 和 Windows 7 缩略图工具栏

python - 将参数从主窗口传递到弹出的 Qdialog 窗口