2013-08-05 2 views
2

Я хочу создать сетку кнопок, которые будут переключаться цветом при нажатии. В настоящий момент каждая кнопка запускает нижнюю правую кнопку. Ниже приведен код. Два вопроса, почему он это делает и как его исправить?Массив кнопок в python

def main(self): 
    root = Tk() 
    frame=Frame(root) 
    frame.grid(row=0,column=0) 

    self.btn= [[0 for x in xrange(20)] for x in xrange(60)] 
    for x in range(60): 
     for y in range(20): 
      self.btn[x][y] = Button(frame,command= lambda: self.color_change(x,y)) 
      self.btn[x][y].grid(column=x, row=y) 

    root.mainloop() 

def color_change(self,x,y): 
    self.btn[x][y].config(bg="red") 
    print x,y 

ответ

4

Я понял. Заменить:

self.btn[x][y] = Button(frame,command= lambda: self.color_change(x,y)) 

С:

self.btn[x][y] = Button(frame,command= lambda x1=x, y1=y: self.color_change(x1,y1)) 

К сожалению, если это была неприятность любому.

+1

вы знаете, int 'lambda', вы можете просто« x = x, y = y ». Переменные в лямбда не должны быть разными. –

Смежные вопросы