使用lambda表達式連接pyqt
考慮以下代碼:類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