好的,所以我有这个代码生成一个按钮网格:
def click():
squares[-1][y].configure(bg='blue')
def game(width,height):
global squares
squares = []
global y
for x in range(width):
squares.append([0] * height)
for y in range(height):
squares[-1][y] = Button(gameWindow,command=click)
squares[-1][y].grid(column = x, row = (y + 1), sticky =(N+S+E+W))
for x in range(width):
Grid.columnconfigure(gameWindow, x, weight = 1)
for y in range(height):
Grid.rowconfigure(gameWindow, (y + 1), weight = 1)
gameWindow.mainloop()
game(8,8)
我可以通过以下方式配置特定按钮(1,1):
squares[1][1].configure(bg='blue')
但是当我尝试使用按钮时,它会更改右下角的按钮。
非常感谢任何帮助,提前谢谢。
答案 0 :(得分:1)
你有循环
for y in range(height):
所以在此循环后y
等于height-1
。
当您点击按钮时,它会使用squares[-1][y]
y = height-1
,因此您始终使用squares[-1][height-1]
您必须使用参数 - 按钮编号 - 使用lambda
来确定按钮功能
但是,如果您在lambda
内使用for
,则无法直接lambda:click(y)
但是你需要lambda arg=y:click(arg)
Button(gameWindow, command=lambda arg=y:click(arg))
函数必须得到这个参数并使用它
def click(arg):
squares[-1][arg].config(bg='blue')