私は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
機能が実行を完了する前にメインループに戻っていないことを望むということです。
[なぜタイムが表示されないのですか?]ウィンドウが開く前にウィンドウを一時停止します(https://stackoverflow.com/questions/30284270/why-does-time-sleep-pause-tkinter-window-before-it-開く) –
@Rawing似たような質問をしてくれてありがとう。私の質問の違いは、 'do_comething'関数が完全に実行を完了するまでmainloopに戻ることはしたくないということです。 – MightyInSpirit