Python スクリプト用の tkinter GUI を作成しました。スクリプトを実行すると、GUI ウィンドウのラベル ウィジェットの 1 つに動的な文字列が表示されます。
"働く。" 次に:「作業中..」次に「作業中...」
そして「はたらく」からスタート。スクリプトが完了するまで繰り返します。
(実際には、この領域にプログレス バーがあればいいのにと思います)
出来ますか?
Python スクリプト用の tkinter GUI を作成しました。スクリプトを実行すると、GUI ウィンドウのラベル ウィジェットの 1 つに動的な文字列が表示されます。
"働く。" 次に:「作業中..」次に「作業中...」
そして「はたらく」からスタート。スクリプトが完了するまで繰り返します。
(実際には、この領域にプログレス バーがあればいいのにと思います)
出来ますか?
必要なことを実行する方法を示すために、2 つの簡単なスクリプトを作成しました。1つ目は、ラベルを使用することです:
import tkinter as tk
root = tk.Tk()
status = tk.Label(root, text="Working")
status.grid()
def update_status():
# Get the current message
current_status = status["text"]
# If the message is "Working...", start over with "Working"
if current_status.endswith("..."): current_status = "Working"
# If not, then just add a "." on the end
else: current_status += "."
# Update the message
status["text"] = current_status
# After 1 second, update the status
root.after(1000, update_status)
# Launch the status message after 1 millisecond (when the window is loaded)
root.after(1, update_status)
root.mainloop()
次のものはプログレスバーを使用しています:
import tkinter as tk
# You will need the ttk module for this
from tkinter import ttk
def update_status(step):
# Step here is how much to increment the progressbar by.
# It is in relation to the progressbar's length.
# Since I made the length 100 and I am increasing by 10 each time,
# there will be 10 times it increases before it restarts
progress.step(step)
# You can call 'update_status' whenever you want in your script
# to increase the progressbar by whatever amount you want.
root.after(1000, lambda: update_status(10))
root = tk.Tk()
progress = ttk.Progressbar(root, length=100)
progress.pack()
progress.after(1, lambda: update_status(10))
root.mainloop()
ただし、プログレスバーは少し扱いにくく、スクリプトに合わせて正確にカスタマイズする必要があるため、プログレスバー スクリプトではあまり多くのことを行うことができませんでした。私はこのテーマに少し光を当てるためにそれを書いただけです。ただし、私の答えの主要部分はラベルスクリプトです。
はい、可能です。それには 2 つの方法があります。
コードからラベルを更新したいときはいつでも、 を呼び出すことができますthe_widget.configure(the_text)
。これにより、ラベルのテキストが変更されます。
のインスタンスを作成し、それをラベルtkinter.StringVar
の属性に割り当てることができます。textvariable
変数の値を ( 経由で) 変更するたびthe_variable.set(the_text)
に、ラベルが自動的に更新されます。
これらのいずれかが機能するには、イベント ループがイベントを処理できる必要があることに注意してください (つまり、関数の実行に時間がかかりupdate_idletasks
、イベント ループを呼び出したり再入力したりしないと、何も表示されません)。