在 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中文網其他相關文章!