在PyQt4 中連接插槽和訊號:解決循環訊號連接問題
嘗試在循環內連接PyQt4 中的訊號時,很常見遇到意外行為,例如所有按鈕都列印相同的值。這個問題源自於 Python 中作用域、名稱查找和閉包函數的方式。
在提供的程式碼中,用於連接按鈕的 lambda 函數缺少自己對變數 i 的綁定,而是在__init__ 方法的命名空間。因此,我總是假設循環中定義的最後一個值,在本例中為 9。
為了解決這個問題,Python 提供了多種解決方案,包括:
帶有預設值的關鍵字參數值:
透過將i 作為具有預設值的關鍵字參數傳遞,您可以在lambda 函數中建立一個新綁定:
self._numberButtons[i].clicked.connect(lambda checked, i=i: self._number(i))
functools.partial:
這透過使用所需的參數包裝函數呼叫來提供更簡潔和可讀的方法:
self._numberButtons[i].clicked.connect(partial(self._number, i))
利用這些技術確保每個按鈕的回調函數內的正確綁定,使每個按鈕能夠在以下情況下顯示其相應的值:點擊。
以上是如何避免 PyQt4 中的循環訊號連線問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!