Python,tkinter:如何更改按下按钮的颜色?

时间:2017-01-17 19:43:06

标签: python tkinter

好的,所以我有这个代码生成一个按钮网格:

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')

但是当我尝试使用按钮时,它会更改右下角的按钮。

非常感谢任何帮助,提前谢谢。

1 个答案:

答案 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')