首頁 > 後端開發 > Python教學 > 為什麼我的所有計算器按鈕在 PyQt4 中循環連接時會列印相同的數字?

為什麼我的所有計算器按鈕在 PyQt4 中循環連接時會列印相同的數字?

Linda Hamilton
發布: 2024-11-13 02:22:02
原創
515 人瀏覽過

Why Do All My Calculator Buttons Print the Same Number When Connected in a Loop in PyQt4?

循環連接PyQt4 插槽和訊號:排除意外結果

在PyQt4 建置計算器時,連接按鈕'clicked()'循環內的訊號可能會導致意外的行為。出現此問題的原因是單擊按鈕時未列印預期的數字。相反,所有按鈕都會列印相同的數字。

理解問題

Python 的作用域規則在這種情況下創建了一個閉包。循環變數“i”用作每個按鈕的 lambda 函數的參數。但是,Python 在封閉函數 (__init__()) 的命名空間中解析「i」。由於 'i' 在循環中被修改並最終被賦值為 9,因此所有按鈕都引用同一個閉包,因此無論單擊哪個按鈕,它們都輸出 '9'。

解決問題

要解決此問題,我們可以將「i」作為具有預設值的關鍵字參數傳遞。這在 lambda 函數的命名空間中引入了「i」的新綁定,使其獨立於 __init__() 中的「i」。

使用關鍵字參數的解:

解法使用functools.partial:

種方法是使用functools.partial,它會建立具有預先綁定參數的部分函數。這使程式碼更具可讀性,並消除了關鍵字參數的使用。

透過實作這些解決方案,每個按鈕在點擊時都會列印預期的數字。

以上是為什麼我的所有計算器按鈕在 PyQt4 中循環連接時會列印相同的數字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板