2017-08-12 22 views
1

私はGUI開発が初めてで、Python3.6 + Tkinterを使用してアプリケーションを構築しようとしています。Label.configure()を使用してTkinterラベルのテキストを動的に変更する

私は、ユーザーがボタンを押したときに新しいテキストでデフォルトのテキスト(作成時にラベルで表示)を変更する必要があるという要件があります。達成するためにlabel.configure(text="<new_text>")

私の要件の簡略化されたバージョンを提供するために、Labelが最初に「ようこそ」と表示される例を考えてみましょう。ユーザーがボタンをクリックすると、ラベルテキストが「プロセス開始」に変わり、プロセスが完了した後、ラベルテキストが「プロセス完了」に変わるはずです。ここではdo_something関数が時間を要するプロセスを実行し、time.sleep(5)を使用して5秒間実行されるプロセスをシミュレートします。 EXPECTED

from tkinter import * 
from tkinter import ttk 
import time 

def do_something(): 
    label.configure(text="Process Started") 
    time.sleep(5) #some process/script that takes few seconds to execute 
    label.configure(text="Process Completed") 

root = Tk() 

label = ttk.Label(root, text="Welcome") 
label.pack() 
button = ttk.Button(root, text="Click to Start Process", command=do_something) 
button.pack() 

root.mainloop() 

: 私の期待は、ユーザーがボタンを押したとき、ラベルは5秒間「プロセスが開始」と表示され、プロセスが実行を完了し、最後にした後、ラベルは「完全なプロセス」に更新されるということです。

問題: 私が見ているのは、ボタンを押すと、ラベルのテキストが「ようこそ」から(5秒後)「プロセスが完了しました」に変わります。ボタンが押された直後に私のラベルが「Process Started」と表示されない理由を理解できません。

上記のように、私はGUI開発の初心者です。初めてPythonとTkinterを学んでいます。だから私はプログラム自体にいくつかの間違いを犯す可能性があります。私がプログラムフロー/ロジック自体に何か基本的な間違いをしているなら、私の無知を許してください。私はあなたの考えを聞くのが大好きです、ありがとう!

EDIT:@Rawingで指摘したように、同様の問題が存在する - Why does time.sleep pause tkinter window before it opens 基本的な違いは、しかし、私はdo_something機能が実行を完了する前にメインループに戻っていないことを望むということです。

+0

[なぜタイムが表示されないのですか?]ウィンドウが開く前にウィンドウを一時停止します(https://stackoverflow.com/questions/30284270/why-does-time-sleep-pause-tkinter-window-before-it-開く) –

+0

@Rawing似たような質問をしてくれてありがとう。私の質問の違いは、 'do_comething'関数が完全に実行を完了するまでmainloopに戻ることはしたくないということです。 – MightyInSpirit

答えて

2

"Process Started"にテキストを変更した後、label.update()を使用します。それはsleepの前に5秒間テキストを更新します。

Tkinterは、mainloopですべてを行い、ラベルにテキストを再描画します。あなたのコールバックはまだ返っていないので、あなたのコールバックでそれを描くことはできません。 updateを呼び出すと、コードがまだ実行中であっても、ラベルに必要なすべてのタスクを実行するようにtkinterに指示します。

+0

あなたの答えが正確に私のクエリを解決してくれたことに感謝します。また、tkinter mainloopがどのようにプログラミングされたプログラミングであっても一般的にどのように動作するかについてもっと知る必要があることに気付きました。私に正しい方向を示してくれてありがとう! – MightyInSpirit

関連する問題