2017-11-18 2 views
-1

こんにちは、Pythonでtkinter guiを使って簡単な電卓を作ろうとしました。 しかしまず、ボタンをクリックしようとすると、画面に表示された結果にアタッチされたボタンを作成しようとしていました。ボタンコマンドで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() 

(画面12を示しており、私は3をクリックするだけで、現実の計算機として、スクリーンはその後、123を示している)しかし、問題はスクリーンである私は、いずれかのボタンをクリックしたときにのみ/を添付し、最終的に結果/ /////////////

enter image description here

/コンテンツリストの最後の要素であると私は

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

私はグラム缶に問題があると思います私がそれに対処できる理由についての説明

答えて

1

lambdaと非常に問題があり、ループはforループです。あなたは多くの答えを見つけることができます。

lambdaボタンを作成したときにボタンを押したときの値を使用しないため、すべてのボタンで同じ値(i)が最後のボタンに割り当てられます。

あなたはlambdaに引数にiを割り当てる必要があり、あなたがボタンを

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

を作成するときには、iから値をコピーします私は、各値を代入する必要が忘れてしまったああ。助けてくれてありがとう! –

関連する問題