因此,我使用for循环创建了5 x 5按钮:
for i in range(5):
for j in range(5):
gameButton = Button(boardFrame, bg="khaki1", width=10, height=5, command=colorTheButton)
gameButton.grid(row=i, column=j, sticky=E)
我有一个名为changeColor()的函数:
^{pr2}$现在的问题是,每次我点击任何一个按钮,它不会改变按钮的颜色,而是会改变最后创建的按钮的颜色。我应该怎么做来改变点击的按钮而不是最后一个?在
在
for
循环中,为每个新按钮指定相同的名称gameButton
。这意味着只有最近的按钮保存到变量中,在本例中是右下角的按钮。在当您说
row = gameButton.grid_info()['row']
和column = gameButton.grid_info()['column']
时,这将只获得网格中最后一个按钮的位置。这意味着只有最后一个按钮会按照您的观察进行更新。在要解决这个问题,您可以实现一个包含按钮的列表,或者实现另一种方法。其中一种方法是:
我将命令改为
lambda i=i, j=j: colorTheButton(i, j)
,它将按钮的实际网格位置传递给colorTheButton
。在然后
^{pr2}$colorTheButton
如下:请注意,我已经尽力使您的代码尽可能地相似;这段代码仍然会每次生成一个new按钮,并将旧的按钮覆盖到位。这不如修改原来的按钮有效,但这是一个不同的问题!在
首先,您要创建多个按钮,但是它们被重写地分配给同一个变量
gameButton
,因此您可以仅引用稍后创建的最后一个按钮,这将是有问题的。在您可以创建如下按钮:
其次,您应该将节点信息传递给
^{pr2}$colorTheButton
方法,而不是稍后再尝试找出哪个按钮被按下:相应地修改
colorTheButton
:注意:该函数的最后2行也会继续创建不可引用的button
对象widgets。在所以更好:
相关问题 更多 >
编程相关推荐