【发布时间】:2013-03-08 23:35:09
【问题描述】:
我正在尝试使用 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
我想知道我是否错过了什么或者这根本不可能。
【问题讨论】:
-
您能发布更多代码吗?我假设这个按钮创建代码是从类的
__init__()方法运行的? -
我认为这是一个经典的 Python 词法作用域陷阱