创建一个按钮列表,其中每个按钮都记住其相应的命令

问题描述

我创建了一个列表和一个向该列表添加新按钮的循环。唯一的问题是按钮似乎没有记住它们适当的命令,并且总是必须在循环中回调变量 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') 方法,因为按钮的文本恰好与 {{ 中使用的变量具有相同的值1}}.

解决方法

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...