首页 > 后端开发 > Python教程 > 如何将独特的参数传递给 Tkinter 按钮循环中的命令?

如何将独特的参数传递给 Tkinter 按钮循环中的命令?

Susan Sarandon
发布: 2024-12-31 22:33:15
原创
910 人浏览过

How to Pass Unique Arguments to Commands in Tkinter Button Loops?

使用独特的命令参数在 tkinter 中以编程方式创建按钮

当前的任务是使用 for 循环在 tkinter 界面中生成多个按钮。每个按钮应包含一个唯一的命令参数,表示当前迭代计数。但是,现有代码生成具有一致打印值的按钮,这表明命令参数分配存在潜在问题。

问题:消失的迭代值

提供的代码创建标题范围从“游戏 1”到“游戏 3”的按钮。单击任何这些按钮后,打印值始终为 2,对应于最后一次迭代计数。这表明命令参数被视为单个实体,而不是与每个单独的按钮关联。

解决方案:保留迭代值

关键解决这个问题的方法是在为每个按钮定义命令时保留当前的迭代值 (i)。为此,需要修改 lambda 表达式:

command=lambda i=i: self.open_this(i)
登录后复制

此 lambda 表达式将 i 的当前值分配给名为 i 的变量。这可确保在创建时捕获 i 值并将其附加到特定按钮。因此,每个按钮都可以访问其唯一的迭代计数。

了解 Lambda 闭包

通过使用 i=i,闭包存储 i 的当前值在定义 lambda 时,而不是依赖于调用函数时 i 的值。这保留了每个按钮的必要信息。

固定代码

经过上述修改,更正后的代码如下所示:

def createGameURLs(self):
    self.button = []
    for i in range(3):
        self.button.append(Button(self, text='Game '+str(i+1),
                                  command=lambda i=i: self.open_this(i)))
        self.button[i].grid(column=4, row=i+1, sticky=W)

def open_this(self, myNum):
    print(myNum)
登录后复制

现在,单击任何按钮,都会准确打印相应的迭代计数,解决了最初的问题。

以上是如何将独特的参数传递给 Tkinter 按钮循环中的命令?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板