2017-11-18 206 views
-1

嗨我試圖使用tkinter gui與python做一個簡單的計算器。但首先我試圖創建按鈕,一旦它們被點擊,它們被附加到屏幕上顯示的結果上。 (就像現實生活中的計算器,如果屏幕顯示12和我點擊3,屏幕則顯示123)按鈕命令的Python Tkinter錯誤

from Tkinter import * 
class Calculator(Frame): 

    def __init__(self): 
     Frame.__init__(self) 
     self.master.title('Calculator') 
     self.pack() 

     self.screen=Frame(self, borderwidth=20, relief=SUNKEN) 
     self.screen.pack() 
     self.txtDisplay = Text(self.screen, width=20, height=2) 
     self.txtDisplay.pack() 
     self.screen.grid(row=0, columnspan=5) #columnspan to span multiple columns 

     Contents = ['1','2','3','+','4','5','6','-','7','8','9','*','C','0','=','/'] 
     Buttons = [None]*16 
     j=1 
     count=0 
     for i in range(16): 
      Buttons[i]=Button(self, text=Contents[i], command=lambda : self.txtDisplay.insert(END, Contents[i]), height=2, width=5, borderwidth=5) 
      Buttons[i].grid(row=j, column=i%4) 
      count+=1 
      if count%4==0: 
       j+=1 
       count=0 


Calculator().mainloop() 

然而,問題是,每當我點擊任何鏈接,並最終導致屏幕只重視///////////////

enter image description here

/是的內容列表中最後一個元素,我想有一些錯誤

command=lambda : self.txtDisplay.insert(END, Contents[i]) 

我能摹以及爲什麼會發生這種情況的解釋以及我如何處理它?

回答

1

for循環中出現lambda的問題。你可以找到很多答案。

lambda在創建按鈕時不使用值,但是當您按下按鈕時 - 所有按鈕都使用指向最後一個按鈕的相同值i

您必須分配給i論點lambda,當您創建按鈕

command=lambda x=i: self.txtDisplay.insert(END, Contents[x]) 
+0

它將從i複製值哦,我忘了我來分配每個值。感謝您的幫助! –