在Tkinter 中,您可能會遇到需要使用for 迴圈動態建立多個按鈕的場景,而每個按鈕都應該有一個與其關聯的唯一命令。但是,如果您直接在命令的 lambda 表達式中使用循環變量,則可能會遇到潛在的問題。
請考慮以下程式碼:
users = {"Test": "127.0.0.0", "Test2": "128.0.0.0"} row = 1 for name in users: user_button = Tkinter.Button(self.root, text=name, command=lambda: self.a(name)) user_button.grid(row=row, column=0) row += 1
這裡的目的是為每個使用者建立具有唯一參數值的按鈕。但是,在執行時,所有按鈕都會使用最後分配的 name 值來呼叫 a() 方法,從而導致每個按鈕列印「Test2」。
要解決此問題,您可以利用拉姆達表達式。透過將name 的目前值指派給新參數,您可以為每次迭代建立一個唯一的函數:
user_button = Tkinter.Button(self.root, text=name, command=lambda name=name: self.a(name))
這可確保每個按鈕都有自己的lambda 函數實例以及對應的name 參數。因此,按鈕將使用其預期參數正確呼叫 a() 方法。
以上是在 Tkinter For 迴圈中指派按鈕指令時如何避免 Lambda 閉包問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!