我试图在for循环中用tkinter创建几个按钮,但我在传递给它们的命令方面遇到了一些问题,而且,由于我需要创建的按钮数量不固定,我不能手动创建它们(扫雷游戏)。
按钮被正确创建并以网格形式显示,但命令对所有按钮都是一样的(最后一个按钮的命令)。
我的代码看起来是这样的。
rows = 5
columns = 5
buttons_dict = {}
for i, row in enumerate(range(rows)):
for j, column in enumerate(range(columns)):
buttons_dict[(i, j)] = tk.Button(top_board_frame, command=lambda: btn_click(i, j))
buttons_dict[(i, j)].grid(row=i, column=j)
我的目的是给每个按钮传递一个函数,点击后,返回按钮的坐标。就像这样。
def btn_click(i, j):
current_pair = (i, j)
print(current_pair)
上面的代码的问题是,无论哪个按钮被点击,它都会返回最后一个按钮的坐标。
你可以这样做。在命令中传递一个对按钮的引用。
btn = buttons_dict[(i, j)] = tk.Button(top_board_frame)
btn.configure(command=lambda: btn_click(btn, i, j))