循環連接PyQt4 插槽和訊號:排除意外結果
在PyQt4 建置計算器時,連接按鈕'clicked()'循環內的訊號可能會導致意外的行為。出現此問題的原因是單擊按鈕時未列印預期的數字。相反,所有按鈕都會列印相同的數字。
理解問題
Python 的作用域規則在這種情況下創建了一個閉包。循環變數“i”用作每個按鈕的 lambda 函數的參數。但是,Python 在封閉函數 (__init__()) 的命名空間中解析「i」。由於 'i' 在循環中被修改並最終被賦值為 9,因此所有按鈕都引用同一個閉包,因此無論單擊哪個按鈕,它們都輸出 '9'。
解決問題
要解決此問題,我們可以將「i」作為具有預設值的關鍵字參數傳遞。這在 lambda 函數的命名空間中引入了「i」的新綁定,使其獨立於 __init__() 中的「i」。
使用關鍵字參數的解:
解法使用functools.partial:
種方法是使用functools.partial,它會建立具有預先綁定參數的部分函數。這使程式碼更具可讀性,並消除了關鍵字參數的使用。
透過實作這些解決方案,每個按鈕在點擊時都會列印預期的數字。
以上是為什麼我的所有計算器按鈕在 PyQt4 中循環連接時會列印相同的數字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!