【问题标题】:Creating a list of buttons where each button remembers its appropriate command [duplicate]创建一个按钮列表,其中每个按钮都会记住其相应的命令[重复]
【发布时间】:2021-02-06 23:49:26
【问题描述】:

我创建了一个列表和一个循环,用于向该列表添加新按钮。唯一的问题是按钮似乎不记得它们的相应命令,并且总是必须在循环中回调变量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 中使用的变量具有相同的值。

【问题讨论】:

    标签: python tkinter tkinter-button


    【解决方案1】:

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

    【讨论】:

    • 第一个变种是正确的!非常感谢您的回答
    • @MentalistAndrew 请接受帮助您使用左侧灰色复选标记的答案。
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 2016-06-28
    • 2015-02-22
    • 2015-04-15
    • 2020-03-12
    • 1970-01-01
    相关资源
    最近更新 更多