2016-04-16 23 views
0

完了した計算に基づいてTkinter Labelのテキストを変更する必要があります。私は単純なlabel.configure(text="something new")を使用しています。問題は、whileループのすべての反復でそうする必要があることです。このプロセスは、ループが完了するまで待ってから最後の結果を表示します。私は彼らを絶えず必要としているwhileループ内のTkinterのwidget.configure

def new_frequency_1000times(): 
    k=1 
    while k>1000: 
    #steps to determine new frequency f 
    freq_out.configure(text=str(f)) 
    k=k+1 

master=Tk() 
freq_out = Label(master) 
freq_out.grid(row=0, column=1) 
button_freq=Button(okno, command=new_frequency_1000times, text="Get new f") 
button_freq.grid(row=0, column=0) 

"評価"をループ内で強制する方法はありますか?

+0

はなぜちょうどあなたのwhileループ内で設定を入れませんか?そして、コードが問題をよりよく示すかもしれません。 – Pythonista

+0

私は実際にそれをしました。そうです、コードはここに2番目にあります。 –

答えて

2

問題は、メインの偶数スレッドでwhileループが実行されていることです。したがって、whileループが完了するまでブロックされます。 afterまたはthreadingを使用してください。

はここで小さな例です:

import tkinter as tk 

def new_frequency_1000times(k=0): 

    if k < 1000: 
     freq_out.configure(text=str(k)) 
     #1000 ms = 1 seconds, adjust to taste. 
     root.after(10, lambda: new_frequency_1000times(k+1)) 

root=tk.Tk() 
freq_out = tk.Label(root) 
freq_out.grid(row=0, column=1) 
button_freq=tk.Button(root, command=new_frequency_1000times, text="Get new f") 
button_freq.grid(row=0, column=0) 
root.mainloop() 
0

ウィンドウシステムのイベントを処理して、何かを見えるようにする必要があります。このようなタイトなループで何かをするだけで、あなたのUIをロックアップします。その代わりに、afterメソッドを使用して、ある間隔で変更をスケジュールし、イベントループが必要なUIイベントを処理できるようにする必要があります。