2017-09-07 11 views
1

私は、tkinterを使ってGUI用の簡単なコードを書いています。私の問題は、与えられた2つのエントリーの合計として常に更新されたt1という名前のラベルに印刷された番号を持ちたいということです。もちろん、メソッドを呼び出すときに値を修正するので、項目に.getメソッドを使用することはできませんが、他のIntvarを使用して新しい(常に更新された)IntVarを作成することは熱心ではありません。GUIでの値の更新

from tkinter import * 
window=Tk() 

p1_in=StringVar() 
p1=Entry(window,textvariable=p1_in) 

p2_in=StringVar() 
p2=Entry(window,textvariable=p2_in) 

t1=Label(window,textvariable=(p1_in+p2_in)) # of course this doesn't work 
t1.grid(row=7,column=2) 

window.mainloop() 

ラベルt1を常にp1_in + p2_inの合計で更新できるようにするにはどうすればよいですか? 私はそれらがStringVarであることを知っていますが、出力はこのように自分の意図にとっては良いですし、これが主な問題ではないと私は考えていません。

答えて

1

StringVarのトレースメソッドを使用できます。値が変更された直後に呼び出されます。

from tkinter import * 
window=Tk() 

def calculate(*args): 
    if p1_in.get() and p2_in.get(): #checks if both are not empty 
     try: 
      ans = int(p1_in.get()) + int(p2_in.get()) 
      t1_out.set(str(ans)) 
     except ValueError: 
      t1_out.set("Enter integers!") 

p1_in=StringVar() 
p1=Entry(window,textvariable=p1_in) 
p1_in.trace("w", calculate) 

p2_in=StringVar() 
p2=Entry(window,textvariable=p2_in) 
p2_in.trace("w", calculate) 

t1_out=StringVar() 

t1=Label(window,textvariable=t1_out) #also note that used another variable for output 
t1.grid(row=7,column=2) 
p1.grid(row=5,column=2) 
p2.grid(row=6,column=2) 

window.mainloop() 
関連する問題