簡體   English   中英

使用 QtPushButton.clicked 信號傳遞檢查狀態

[英]Passing check state with QtPushButton.clicked signal

我正在開發一個項目,並嘗試通過button.clicked.connect(self.button_checked)將可檢查按鈕的選中狀態傳遞給函數並遇到問題。 如果我在可調用之前使用“裝飾” @QtCore.pyqtSlot() ,那么檢查狀態將不會通過。 但是,如果我移除裝飾,該功能將按預期工作並在文檔中編寫。 兩種情況見下面的代碼:

帶裝飾

...
btn = QPushButton("Push")
btn.setCheckable(True)
btn.toggled.connect(self.button_checked)
...
@QtCore.pyqtSlot()
def button_checked(self, checked):
    print("checked", checked)
...

我收到錯誤TypeError: button_checked() missing 1 required positional argument: 'checked'按下按鈕時。 但是當我刪除QtCore.pyqtSlot()並且只有:

...
btn = QPushButton("Push")
btn.setCheckable(True)
btn.toggled.connect(self.button_checked)
...
def button_checked(self, checked):
    print("checked", checked)
...

該按鈕按預期工作,並根據選中狀態打印checked Truechecked False

@QtCore.pyqtSlot()有什么用? 我還是 QtPy 的新手,對這條線的目的沒有很好的把握。 在這種情況下我需要明確分配一個插槽嗎? 我發現在某些特定情況下( pyqtSlot 的功能)可能需要這樣做,並且被認為是好的做法,但在這種情況下它似乎有我不想要的效果。

我收到錯誤 TypeError: button_checked() missing 1 required positional argument: 'checked'

那是因為您的插槽不接受任何參數。 @QtCore.pyqtSlot()更改為@QtCore.pyqtSlot(bool)

我的問題是 @QtCore.pyqtSlot() 有什么用?

它被 C++ Qt 所需的QMetaObjectSystem用於執行運行時動態操作,例如調用具有正確簽名的槽。 在這里閱讀更多 在 Python 的情況下,由於 Python 的動態特性,不需要它。

然而,如果您想將您的插槽從 Python (即QML )暴露出來,它是必需的,據說它會稍微快一些

暫無
暫無

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

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