簡體   English   中英

未知的 Python 語法(function_name[data type])-想要更多信息

[英]unknown python syntax (function_name[data type]) - want more info

我正在尋找有關這種語法的更多信息

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 文檔使用重載的display()插槽定義作為示例:

public slots:
    void display(int num);
    void display(double num);
    void display(const QString &str);
    // ...

並將display連接到可以在更改時發送int值的信號將連接到其中的第一個。

另一方面,Python 沒有這樣的概念。 Python 是動態類型的,函數定義不包含類型信息。

因此,圍繞 QT 的 PyQT 包裝器允許您通過在信號上使用 Python 的訂閱語法來定義期望的參數類型,這與您用於處理列表中的索引和切片或字典中的鍵的語法相同。 使用它,您可以將您的插槽連接到信號的特定“變體”。 在這種情況下,信號不是方法,它們是支持訂閱的自定義包裝器對象,並且該signal[type]的結果是一個更具體的信號對象,然后您可以連接到或斷開連接,並且插槽將永遠是調用該特定類型。

對於您的示例, QAbstractSlider.valueChanged` 信號只有一種變體,它發出一個整數:

void    valueChanged(int value)

因此,在 Python 中,您可以通過valueChanged[int]綁定該變體。 如果信號不帶參數,則可以直接使用signal ,無需訂閱; 例如sliderPressed 實際上,您可以以這種方式使用任何信號,但是如果有多個重載,則會選擇默認值; 在這種情況下,您可能需要檢查.signal屬性以查看將使用.signal屬性。

請參閱 PyQT5 手冊中的 信號和插槽文檔

綁定信號具有實現相關功能的connect()disconnect()emit()方法。 它還有一個signal屬性,它是 Qt 的SIGNAL()宏返回的信號的簽名。

信號可能過載,即。 具有特定名稱的信號可能支持多個簽名。 可以使用簽名對信號進行索引,以便選擇所需的信號。 [...]

如果信號過載,那么它將有一個默認值,如果沒有給出索引,則將使用該默認值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM