如何避免使用 For 循环创建 Tkinter 按钮时出现参数重复?
克服 Tkinter For 循环中的按钮参数重复
在 Tkinter 中,如果参数分配正确,通过 for 循环创建按钮可能会导致意外行为没有实施。考虑以下代码片段:
users = {"Test": "127.0.0.0", "Test2": "128.0.0.0"} row = 1 for name in users: user_button = Tkinter.Button(self.root, text=name, command=lambda: self.a(name)) user_button.grid(row=row, column=0) row += 1
预期结果是每个按钮从用户字典接收其自己的唯一参数。但是,按任意按钮只会打印字典中的最后一个值(例如“Test2”)。
出现此问题的原因是 lambda 表达式在整个循环中使用相同名称的变量。每次迭代都会覆盖先前的值,使 lambda 保留循环中最后分配的名称。
解决方案:Lambda 中的默认关键字参数
要解决此问题,您可以在 lambda 表达式中使用默认关键字参数。下面是更正后的代码:
for name in users: user_button = Tkinter.Button(self.root, text=name, command=lambda name=name: self.a(name))
通过将 name 变量的当前值显式绑定到 lambda 的 name 关键字参数,lambda 为每个按钮保留正确的参数。现在,每次按下按钮都会触发所需的唯一参数输出。
此技术有效地确保每个按钮在 for 循环中保留其预期的参数分配。
以上是如何避免使用 For 循环创建 Tkinter 按钮时出现参数重复?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

攻克Investing.com的反爬虫策略许多人尝试爬取Investing.com(https://cn.investing.com/news/latest-news)的新闻数据时,常常�...

Python3.6环境下加载pickle文件报错:ModuleNotFoundError:Nomodulenamed...

使用Scapy爬虫时管道文件无法写入的原因探讨在学习和使用Scapy爬虫进行数据持久化存储时,可能会遇到管道文�...
