首頁 >後端開發 >Python教學 >如何避免 PyQt4 中的循環訊號連線問題?

如何避免 PyQt4 中的循環訊號連線問題?

Linda Hamilton
Linda Hamilton原創
2024-11-13 16:52:02491瀏覽

How to Avoid Looped Signal Connection Issues in PyQt4?

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn