2017-11-18 137 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复制值哦,我忘了我来分配每个值。感谢您的帮助! –