2017-01-17 44 views
-1

好了,我有這樣的代碼生成按鈕的網格:通過這樣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

請提供[ MCVE。具體來說:會發生什麼以及您預期會發生什麼。 –

+0

你有'在範圍(高度)的y',所以在這個循環之後'y == height-1'。你需要使用'squares [-1] [height-1]' – furas

+0

'Button(gameWindow,command = lambda arg = y:點擊(arg))'和'def點擊(arg):方塊[-1] [arg] .config(bg ='blue')' – furas

回答

1

你有循環

for y in range(height): 

所以這個循環之後y等於height-1

當你點擊按鈕,然後它使用squares[-1][y]y = height-1,所以你總是使用squares[-1][height-1]

你必須assing到按鈕的功能與參數 - 按鈕數 - 使用lambda
但是如果你使用lambdafor那麼你不能直接做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')