」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用Lambda表達式與PyQt槽函數為何導致意外行為?

使用Lambda表達式與PyQt槽函數為何導致意外行為?

發佈於2025-04-16
瀏覽:771

Why Does Using Lambda Expressions With PyQt Slots Lead to Unexpected Behavior? 
使用lambda表達式連接pyqt

中的插槽,可以使用lambda表達式將信號連接到插槽。但是,在某些方案中使用lambda表達式可能會導致意外行為。

考慮以下代碼:類mainwindow(qtgui.qwidget): def __init __(自我): ... self.buttons = [] 對於[3,4]中的IDX: button = qtgui.qpushbutton('button {} auto'.format(idx),self) button.clicked.connect(lambda x = idx:self.button_pushed(x)) self.buttons.append(按鈕) main_layout.addwidget(button)的原因是,此行為的原因是qpushbutton的點擊信號發出了一個指示fign的參數,該參數指示了fint fint fint finttht fint的狀態。當在插槽中使用lambda表達式時,分配的值(例如在這種情況下為x = idx)被發出的參數覆蓋。

解決此問題,lambda的表達式應忽略按鈕狀態並使用附加的命名參數:

此修改可確保正確的值傳遞給button_pushed方法,無論按鈕的狀態如何。

理解lambda表達的機制也很重要。在插槽連接的上下文中,信號啟動時未評估lambda函數。取而代之的是,將函數的指針(帶有替換參數)連接到信號。發出信號時,信號傳遞的參數調用連接的函數。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3