使用Lambda 在Tkinter For 迴圈中指派按鈕指令
使用lambda 函式在Tkinter for 迴圈中建立按鈕時,避免使用在迴圈內重新分配相同的變數。這可確保每個按鈕接收到唯一的參數。
問題:
在提供的程式碼中:
def a(self, name): print(name) 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
中的lambda 函數for 迴圈引用同名變數,該變數在每次使用迭代期間都會重新分配。因此,所有按鈕都會呼叫相同的函數,並將最後一個值分配給名稱,從而導致不正確的行為。
解決方案:
要解決此問題,您可以使用預設參數將name 變數的目前值綁定到lambda 的關鍵字參數:
user_button = Tkinter.Button(self.root, text=name, command=lambda name=name: self.a(name))
透過預設關鍵字參數,每個按鈕的lambda 函數有自己唯一的name變數副本,確保您在按一下按鈕時使用正確的參數。
以上是如何避免使用 Lambda 函數在 Tkinter For 迴圈中重新指派按鈕指令?的詳細內容。更多資訊請關注PHP中文網其他相關文章!