-1

我创建了一个列表和一个循环,将新按钮添加到该列表中。唯一的问题是按钮似乎不记得它们的适当命令,并且总是必须回调x循环中的变量。

Buttons = []
for x in range(9):
    Buttons.append(Button(frame2, text = str(x+1), command = lambda : num_pressed(x+1), width = 10, height = 5))

该函数以与文本相同的方式num_pressed使用该变量x,除了文本在定义后保持不变,但命令没有。

因此,一旦创建了所有按钮,就调用命令,x = 8因为这就是循环结束的地方。所以最后他们都调用了命令num_pressed(9)

如何让命令记住它应该与文本相同的值?也许为每个按钮分配某种值,然后根据存储在按钮本身中的值分配命令?

旁注:我还没有找到一种方法,但应该可以使用该方法.cget('text'),因为按钮的文本恰好与应该使用的变量具有相同的值num_pressed

4

1 回答 1

0

这是一个常见问题,有一个简单的解决方案:将您的 lambda 函数 x 作为参数!为此,请替换lambda : num_pressed(x + 1)lambda x=x: num_pressed(x + 1)(或者lambda x: num_pressed(x + 1),不确定,但现在无法测试,已经很晚了......但是试试吧,两者之一会起作用)。

于 2021-02-06T23:58:25.027 回答