我想用Tkinter製作一個計算器。我一直在努力清理代碼,但遇到了一些麻煩。當創建按鈕,我使用以下代碼:lambda與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)
用下面是所述命令時按鈕1,2和3按該順序被壓稱爲
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
,以下是輸出:
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 __()'方法運行的? – pydsigner 2013-03-08 23:39:20
我認爲這是一個經典的Python詞法範圍gotcha – slezica 2013-03-08 23:44:37