2017-11-02 7 views
2

私はGUI計算機を作りたいと思います。私はモジュールtkinterを使いました。私は端末に印刷するようにしましたが、Entryで更新しようとすると更新されません。私は何をしますか?Pythonの電卓は "Entry"で更新されません。 GUI計算機です

from tkinter import * 
from tkinter import ttk 
import tkinter as tk 

class App: 
    def __init__(self, master): 

     self.total = DoubleVar(value=0.0) 

     l_uno = ttk.Label(master, text="Nº 1 = ").grid(row=1, column=1) 
     l_dos = ttk.Label(master, text="Nº 2 = ").grid(row=1, column=3) 

     self.uno = ttk.Entry(master) 
     self.uno.grid(row=1, column=2) 

     self.dos = ttk.Entry(master) 
     self.dos.grid(row=1, column=4) 

     self.bsuma = ttk.Button(master, text="+", command=self.suma).grid(row=3, column=1) 
     e_resultado = ttk.Entry(master, textvariable=self.total).grid(row=1, column=5) 

    def suma(self): 
     data_error = False 
     try: 
      resultado = float(self.uno.get()) + float(self.dos.get()) 
      print (resultado) 
      self.total.set(result) 
     except: 
      data_error = True 
root = Tk() 
alfa = App(root) 
root.mainloop() 
+1

受け入れ可能な回答を受け取った後で**あなたの質問を削除しないでください**。あなたの質問はあなたの利益のためだけではなく、将来の読者のためにも役立つはずです。 –

+1

私はあなたの質問を削除することはあなたの質問に答える時間を取った人には非常に不快であると付け加えたい。あなたの質問が目に見えて問題になることができるなら、最初に質問してはいけません。 –

答えて

2

あなたの計算結果は、名前resultadoにバインドされていますが、存在しない名前resultの代わりresultadoself.total.setを呼び出しています。しかし、あなたのコードは、 "ヌード" except:句でエラーメッセージを無効にしたため、このエラーは報告されません。例外をキャッチするときは、キャッチしようとするものだけをキャッチするように、名前付き例外を使用することをお勧めします。exceptブロックは、Exceptionオブジェクトが提供する情報を使用する必要があります。

修正されたバージョンのコードです。

from tkinter import ttk 
import tkinter as tk 

class App: 
    def __init__(self, master): 
     self.total = tk.DoubleVar(value=0.0) 

     ttk.Label(master, text="Nº 1 = ").grid(row=1, column=1) 
     ttk.Label(master, text="Nº 2 = ").grid(row=1, column=3) 

     self.uno = ttk.Entry(master) 
     self.uno.grid(row=1, column=2) 

     self.dos = ttk.Entry(master) 
     self.dos.grid(row=1, column=4) 

     ttk.Button(master, text="+", command=self.suma).grid(row=3, column=1) 
     ttk.Entry(master, textvariable=self.total).grid(row=1, column=5) 

    def suma(self): 
     data_error = False 
     try: 
      resultado = float(self.uno.get()) + float(self.dos.get()) 
      print (resultado) 
      self.total.set(resultado) 
     except ValueError as e: 
      print(e) 
      data_error = True 

root = tk.Tk() 
alfa = App(root) 
root.mainloop() 

私はまた、あなたのコードに他のいくつかのマイナーな変更を加えました。私はfrom tkinter import *ワイルドカードのインポートステートメントを取り除いた。そして私はl_unoのような名前への割り当てを取り除きました。 .gridメソッドはNoneを返します。これらの割り当ては、単にそれらの名前にNoneを保存しているだけで、ウィジェットを保存していません。しかし、ウィジェットへの参照を保持する必要がないので、割り当てを行う必要はありません。 の場合は参照を保持する必要があり、self.unoself.dosのように、1行にウィジェットを定義し、別の行に.gridを呼び出す必要があります。

+0

ありがとう、私はそれを修復しようとしている多くの時間がありました! –

+1

@ÁngelPitadaVeigaRamonde私の喜び!私の答えがあなたを助けてくれたなら、それを[受け入れる](http://meta.stackexchange.com/a/5235)と考えてください。 –

関連する問題