mieki256's diary



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
"""
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()

ss_01_ttk_progressbar_01_py.gif


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

_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()

ss_02_ttk_progressbar_02_py.gif


与えるパラメータは以下。

.update() を呼ぶのはよくないらしい :

.update() を呼ばないと描画が更新されなかったので呼んでみたけれど、そういう書き方は良くないらしい…。以下で解説されていた。

_【Python】Tkinterの update() / update_idletasks() の違いと注意点 #Python3 - Qiita

以上です。

過去ログ表示

Prev - 2025/10 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project