我已经创建了9个带有循环的按钮,希望每个按钮在单击时都显示“x”。但是,命令功能没有为每个按钮正确执行
我已经试过用lambda了。。。我想问题可能在于我给每个按钮命名的方式
def create_buttons(self):
buttoncounter = 1
for i in range(9):
self.temp_string = "b" + str(buttoncounter)
self.temp_string = Button(self, text = "\n\t\n\t\n\t")
self.temp_string.grid(row = (20 + i), column = (20))
self.temp_string.configure(command=partial(self.mark_box,
buttoncounter))
buttoncounter += 1
def mark_box(self, num):
turnlist = ["x", "o"]
self.temp_string = "b" + str(num)
self.temp_string.configure(text = "x")
我想能够点击一个按钮,让它自己关闭,但当我点击9个按钮中的任何一个时,它只会关闭第9个
为了访问在循环中创建的小部件,我们使用字典和列表来保持对它们的引用。稍后,我们可以从字典或列表中存储的引用中修改它们
像这样
当我们需要获取一个特定的按钮时,我们可以通过
all_buttons[0]
来获取它,这将为我们提供在循环中首先创建的Button
的实例但是,如果您想给出自己的标记或名称来引用每个
Button
,那么使用字典其中键将是名称,值将是Button
的实例为了引用,我们使用
all_buttons['Button_0']
给出了第一个创建的Button
现在,如何将命令传递给循环中的每个按钮
我看到您正在使用来自
functools
的partial
将参数传递给函数mark_box
,我们也可以使用lambda
来获得相同的结果,而无需导入functools请参阅post以获得更好的理解。下面是一个组合示例,演示如何使用
lambda
将循环中的参数传递给Button
的回调函数,并保留对Button
的引用相关问题 更多 >
编程相关推荐