rik*_*kit 3 python user-interface tkinter button
我想生成n个不同的Tkinter按钮.我有这个代码:
import Tkinter as tk
for i in range(boardWidth):
newButton = tk.Button(root, text=str(i+1),
command=lambda: Board.playColumn(i+1, Board.getCurrentPlayer()))
Board.boardButtons.append(newButton)
Run Code Online (Sandbox Code Playgroud)
如果boardWidth是5,虽然我得到标记为1-5的按钮,但是当它们单击时它们都会执行Board.playColumn(5,Board.getCurrentPlayer()).
我需要第一个按钮来执行Board.playColumn(1,Board.getCurrentPlayer()),第二个按钮来执行Board.playColumn(2,Board.getCurrentPlayer())等等.
谢谢你的帮助!
mar*_*eau 11
我认为问题是在循环结束后lambda正在拾取最终值.这应该解决(未经测试):ifor
import Tkinter as tk
for i in range(boardWidth):
newButton = tk.Button(root, text=str(i+1),
command=lambda j=i+1: Board.playColumn(j, Board.getCurrentPlayer()))
Board.boardButtons.append(newButton)
Run Code Online (Sandbox Code Playgroud)
更新
顺便说一句,这是通过向lambda函数添加一个参数来实现的,该参数的默认值i是根据在循环中创建每个函数时的值计算的,而不是i在稍后执行其中的表达式时通过闭包返回最终值.