我正在寻找有关这种语法的更多信息
function_name [数据类型]
我不知道这叫什么,所以我希望有人能指出我正确的方向。我已经习惯了这种语法,在列表和字典中引用了值,但对函数定义却没那么多。
我在关注PyQt5教程时遇到过这个,特别是这个
http://zetcode.com/gui/pyqt5/widgets/
其中包含此行
sld = QSlider(Qt.Horizontal, self)
...
sld.valueChanged[int].connect(...)
从Qt5文档中我可以看到这是信号函数的定义
valueChanged(int value)
https://doc.qt.io/qt-5.11/qabstractslider.html#signals
谢谢,
在C ++中编码Qt时,您可以使用称为方法重载的C ++技术使用具有不同签名的插槽订阅信号。 Qt将根据更改值的参数类型调用正确的插槽。 Qt documentation on slots使用重载的display()
插槽定义作为示例:
public slots:
void display(int num);
void display(double num);
void display(const QString &str);
// ...
并将display
连接到一个可以在变化时发送int
值的信号将连接到这些中的第一个。
另一方面,Python没有这样的概念。 Python是动态类型的,函数定义不包括类型信息。
因此,围绕QT的PyQT包装器允许您通过在信号上使用Python的subscription syntax来定义所期望的参数类型,您使用相同的语法来处理列表中的索引和切片或字典中的键。使用此功能,您可以将插槽连接到信号的特定“变体”。信号不是这种情况下的方法,它们是支持订阅的自定义包装器对象,而signal[type]
的结果是一个更具体的信号对象,然后您可以连接到或断开连接,并且只会调用插槽具体类型。
对于您的示例,QAbstractSlider.valueChanged`信号只有一个变体,一个发出整数:
void valueChanged(int value)
所以在Python中你可以通过valueChanged[int]
绑定该变体。如果信号不带参数,则可以直接使用signal
,无需订阅;例如sliderPressed
。事实上,您可以使用任何信号,但如果有多个重载,则选择默认值;在这种情况下,您可能需要检查.signal
属性以查看将要使用的属性。
请参阅PyQT5手册中的Signals and Slots documentation:
绑定信号具有实现相关功能的
connect()
,disconnect()
和emit()
方法。它还有一个signal
属性,它是Qt的SIGNAL()
宏返回的信号的签名。信号可能过载,即。具有特定名称的信号可能支持多个签名。可以用签名索引信号以便选择所需的信号。 [...]
如果信号过载,那么如果没有给出索引,它将具有默认值。