2017-04-10 10 views
-1

私のスケールウィジェットから特定の値に達した後、テキストウィジェットにテキストを挿入しようとしています。しかし、私のifステートメントが動作しないと、計算ボタンを押した後にテキストウィジェットに何も挿入されていないようです。コールバック値に達した後にテキストを挿入する - Tkinter Text Widget

self.dU = Scale(self.f2, from_=100, to=-100) 
self.calculate_button = Button(self.f2, text="Calculate", command=self.calculate) 

self.results_display = Text(self.f3, height=10, width=62) 
self.results_display.pack() 
self.results_display.configure(state=DISABLED) 

def results_text(self): 
    if self.dU.get() > 0: 
     self.results_display.configure(state=NORMAL) 
     self.results_display.insert(END, "dU > 0, internal energy of the particles increases, therefore temperature increases.") 
     self.results_display.configure(state=DISABLED) 

def calculate(self): 
    self.results_text() 
+0

実際に何が起こっているのかを具体的に説明する必要があります。 –

答えて

0

コードでは、スケールが作成されてから約1ミリ秒後にifステートメントを実行しています。

値が変更されるたびにifステートメントを呼び出す場合は、スケールのcommandパラメータを設定します。例えば

self.du = Scale(..., command=self.scale_changed) 
... 
def scale_changed(self, value): 
    value = int(value) 
    if value > 0: 
     ... 

self.du.get()、この場合に、整数が返されていても、現在の値を文字列としてscale_changedに渡されます。

+0

私の質問を編集しました。もう一度レビューしてください。計算ボタンを押した後、テキストウィジェットにテキストを追加したいと思います。この場合、dU> 0の場合、テキストウィジェットには何も挿入されません。 –

0

if文は機能しますが、あなたのプログラムが起動するときには一度しか呼び出されません。私はあなたがスライダの値が変化するたびにそのチェックを実行したいと思っています。これを行うには、変数を使用してトレースを作成する必要があります:

self.dU = tk.IntVar() 
    self.dU.trace('w', self.check) 
    s = tk.Scale(self, variable=self.dU, from_=100, to=-100) 
    s.pack() 

    self.results_display = tk.Text(self, height=10, width=62) 
    self.results_display.pack() 
    self.results_display.configure(state=tk.DISABLED) 

def check(self, *args): 
    if self.dU.get() > 0: 
     self.results_display.configure(state=tk.NORMAL) 
     self.results_display.insert(tk.END, "dU > 0, internal energy of the particles increases, therefore temperature increases.") 
     self.results_display.configure(state=tk.DISABLED) 
関連する問題