2012-02-15 20 views
3

私はGUIを使ってプログラムを作っています。ボタンをクリックすると、Entryウィジェットに入力されたテキストがLabelウィジェットに表示されます。ボタンが押された後に表示されるこれまでのところだけです:TkInter(Python)のウィジェット間でデータを転送する方法

(PY_VAR0 + PY_VAR1)^ PYVAR2

これは、プログラム全体のコードで、私はフレームレイアウトとしてクラスを使用しています。このコードは、必要に応じて提供することもできますが、関連性がないと判断しています。

import math 
from tkinter import * 

app = Tk() 

a_input = ParamIn(app, "Please enter A:") 
a_input.pack() 

b_input = ParamIn(app, "Please enter B:") 
b_input.pack() 

n_input = ParamIn(app, "Please enter n:") 
n_input.pack() 

int1 = IntVar() 
int2 = IntVar() 
int3 = IntVar() 

form = StringVar() 
form.set('(%s + %s)^%s' % (int1, int2, int3)) 

def update_form(): 
    number1 = a_input.number.get() 
    number2 = b_input.number.get() 
    number3 = n_input.number.get() 
    int1.set(number1) 
    int2.set(number2) 
    int3.set(number3) 
    a_input.number.delete(0, END) 
    b_input.number.delete(0, END) 
    n_input.number.delete(0, END) 

Button(app, text = "Contine", command = update_form).pack(pady = 10) 

Label(app, relief = SUNKEN, textvariable = form).pack(padx = 10, pady = 5, side = "bottom") 

app.mainloop() 

なぜ私の論理が正しいと感じるので、mainloopの前のプログラムの最後のラベルが更新されないのか分かりません。私はプログラミングに慣れていないので、愚かな間違いかもしれません。

+0

自分のクラスにアプリケーションをラップするのはかなり標準的だと思います。そうすることで、すべてのコンポーネントがクラス内で簡単にアクセスできるようになります。 http://infohost.nmt.edu/tcc/help/pubs/tkinter/minimal-app.html – monkut

答えて

0

ラベルを変更するたびにform.set(...)に電話する必要があります。初期値の定義に使用する変数を変更するだけで自動的に変更されるわけではありません。

+0

フォームを追加すると( '(%s +%s)^%s'% (int1、int2、int3))をupdate_form関数に渡しても、私はまだ同じ出力を得ます>(PY_VAR0 + PY_VAR1)^ PYVAR2なぜですか? – Kage93

+0

@ Kage93:わかりません。 print文を追加して、int1、int2、int3の値を確認してください。 –

+0

まだあります:PY_VAR0 PY_VAR1 PY_VAR2 – Kage93

関連する問題