2025/10/24(金) [n年前の日記]
#1 [tkinter][python] tkinterでプログレスバー
tkinter を使っているGUIアプリで、どのくらい処理が進んだかを示すプログレスバーを表示したい。
tkinter に含まれている ttk の中に、Progressbar というクラスがあるらしい。コレを使えばなんとかなるかな…。
_[Python][tkinter] forループ数に応じたプログレスバーのシンプルな表示方法 #Tkinter - Qiita
_Tkinter ttk.Progressbar - Tkinter による GUI プログラミング - Python 入門
_[Python/tkinter] ttk.Progressbarで進捗状況を表示しよう!色やスタイルの変更方法も解説!|すらぷろ
ttk.Progressbar には2つのモードがあるらしい。
確定的モードだと以下のような感じだろうか。
_01_ttk_progressbar_01.py

不確定的モードなら以下。
_02_ttk_progressbar_02.py

与えるパラメータは以下。
tkinter に含まれている ttk の中に、Progressbar というクラスがあるらしい。コレを使えばなんとかなるかな…。
_[Python][tkinter] forループ数に応じたプログレスバーのシンプルな表示方法 #Tkinter - Qiita
_Tkinter ttk.Progressbar - Tkinter による GUI プログラミング - Python 入門
_[Python/tkinter] ttk.Progressbarで進捗状況を表示しよう!色やスタイルの変更方法も解説!|すらぷろ
ttk.Progressbar には2つのモードがあるらしい。
- 確定的。mode="determinate" を指定。処理数が決まっている/確定している場合に使う。
- 不確定的。mode="indeterminate" を指定。処理数が決まってない/不確定の場合に使う。
確定的モードだと以下のような感じだろうか。
_01_ttk_progressbar_01.py
"""
ttk.Progressbar sample. determinate mode.
Windows11 x64 25H2 + Python 3.10.10 64bit
"""
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import messagebox
import time
def count_up_start():
pb.configure(value=0)
pb.update()
for i in range(100):
pb.configure(value=i + 1)
pb.update()
time.sleep(0.025) # wait
messagebox.showinfo("Message", "Finish !")
root = tk.Tk()
root.title("ttk.Progressbar sample 1")
pb = ttk.Progressbar(root, length=320, maximum=100, mode="determinate", value=0)
pb.pack(padx=16, pady=8)
btn = ttk.Button(root, text="Start", command=count_up_start)
btn.pack(pady=16)
root.mainloop()

不確定的モードなら以下。
_02_ttk_progressbar_02.py
"""
ttk.Progressbar sample. indeterminate mode.
Windows11 x64 25H2 + Python 3.10.10 64bit
"""
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import messagebox
import time
def count_up_start():
pb.configure(mode="indeterminate", value=0, maximum=30)
pb.start()
for i in range(100 + 1):
pb.step()
pb.update()
time.sleep(0.025) # wait
pb.stop()
messagebox.showinfo("Message", "Finish !")
pb.configure(mode="determinate", maximum=100, value=0)
root = tk.Tk()
root.title("ttk.Progressbar sample 2")
pb = ttk.Progressbar(root, length=320, maximum=100, mode="determinate", value=0)
pb.pack(padx=16, pady=8)
btn = ttk.Button(root, text="Start", command=count_up_start)
btn.pack(pady=16)
root.mainloop()

与えるパラメータは以下。
- length=320 : バーの長さを指定。
- maximum=10 : 最大数を指定。
- value=0 : 現在値を指定。
- mode="indeterminate" / mode="determinate" : モードを指定。
◎ .update() を呼ぶのはよくないらしい :
.update() を呼ばないと描画が更新されなかったので呼んでみたけれど、そういう書き方は良くないらしい…。以下で解説されていた。
_【Python】Tkinterの update() / update_idletasks() の違いと注意点 #Python3 - Qiita
_【Python】Tkinterの update() / update_idletasks() の違いと注意点 #Python3 - Qiita
[ ツッコむ ]
以上、1 日分です。