gpt4 book ai didi

python - lambda 与 tkinter 奇怪地合作

转载 作者:行者123 更新时间:2023-11-28 22:00:13 25 4
gpt4 key购买 nike

我正在尝试使用 Tkinter 制作一个计算器。我一直在尝试稍微清理一下代码,但遇到了麻烦。创建按钮时,我使用以下代码:

Button(self,text="1",command=lambda: self.addkey("1"),width=self.defaultwidth,height=self.defaultheight).grid(row=5, column=0)
Button(self,text="2",command=lambda: self.addkey("2"),width=self.defaultwidth,height=self.defaultheight).grid(row=5, column=1)
Button(self,text="3",command=lambda: self.addkey("3"),width=self.defaultwidth,height=self.defaultheight).grid(row=5, column=2)

以下是调用的命令

def addkey(self,key):
# Adds a given key to the display
if len(self.displaytext) + len(key) <= self.maxlength:
self.displaytext += key
self.display["text"] = self.displaytext

按顺序按下按钮 1、2 和 3 时,输出如下:

123

我一直在尝试清理代码,使其看起来更像:

for i in range(3):
Button(self,text=str(i+1),command=lambda: self.addkey(str(i+1)),width=self.defaultwidth,height=self.defaultheight).grid(row=5, column=i)

这会很好地添加按钮,但是当按顺序按下 1、2 和 3 时,屏幕上会显示以下内容:

333

我想知道我是否遗漏了什么,或者这根本不可能。

最佳答案

啊,范围界定。当你这样做时:

command=lambda: self.addkey(str(i))

不是当场i“解析”为一个数字。您只是告诉 lambda 在被调用时引用 i之后

for 循环结束后的任何时候,i = 3(最后一个值),所以你所有的 lambda 都得到 3当他们要求 i 时。

如果我没记错的话,您可以添加一个函数作为间接方法,它会从周围的作用域中适本地“捕获”i

def add_key_f(i):
return lambda self: self.addkey(i)

关于python - lambda 与 tkinter 奇怪地合作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15305153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com