首頁 >後端開發 >Python教學 >為什麼使用 Lambda 表達式將多個按鈕連接到 PyQt 中的相同插槽會導致意外行為?

為什麼使用 Lambda 表達式將多個按鈕連接到 PyQt 中的相同插槽會導致意外行為?

Linda Hamilton
Linda Hamilton原創
2024-11-08 13:22:02845瀏覽

Why Does Using Lambda Expressions to Connect Multiple Buttons to the Same Slot in PyQt Lead to Unexpected Behavior?

在 PyQt 中使用 Lambda 表達式連接槽

在 Qt 中,lambda 表達式可用於將訊號連接到槽。但是,這種方法有一些限制,可能會導致意外行為。

問題:

使用 lambda 表達式將多個按鈕連接到同一插槽時,僅最後的連接工作正常。具體來說,透過單獨呼叫 connect() 手動連接的按鈕是成功的,而使用 lambda 表達式循環連接的按鈕都會產生相同的錯誤結果。

分析:

這個問題是由於lambda 表達式在訊號被觸發時被求值,並且其可選參數的值被訊號的參數覆蓋這一事實而引起的。對於 QPushButton.clicked 訊號,此參數表示按鈕的狀態。

解:

要解決此問題,應修改lambda 表達式如下所示:

button.clicked.connect(lambda state, x=idx: self.button_pushed(x))

透過將狀態加入為lambda表達式的第一個參數,可以忽略它,同時仍允許將idx 的預期值傳遞到槽。

了解Lambda 表達式連接:

當lambda 表達式用於連接訊號時,它會建立一個匿名函數,每當訊號被觸發時都會對該函數進行求值。 lambda 表達式的參數綁定到訊號的參數,在本例中為按鈕的狀態。然後使用 lambda 表達式的結果作為參數來呼叫該槽。

以上是為什麼使用 Lambda 表達式將多個按鈕連接到 PyQt 中的相同插槽會導致意外行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn