【Python GUIサンプル】TkinterでProgressbar(プログレスバー)を使ってみる
目次
プログレスバー
ユーザに対して進捗状況を伝えたり、処理が実行されていることを視覚的に伝えるためのバー

使用するモジュール
ttk.Progressbar
確定モードと不確定モード
・確定モード
進捗状況が加算されていくタイプのモード

確定モードでプログレスバーを表示するためには
下記のようにmode=’determinate’を指定する。
ttk.Progressbar(self, orient=HORIZONTAL, length=200, mode='determinate')
orientオプションはプログレスバーの向きを指定する
・HORIZONTAL もしくは VERTICALを指定する
lengthオプションにはサイズを指定する
・length=100などを指定する
maximumオプションで最大値を設定する
・maximumのデフォルト値は100
下記が確定モードのサンプルコード
from tkinter import *
import tkinter.ttk as ttk
class ProgressBarSampleApp(ttk.Frame):
def __init__(self, app):
super().__init__(app)
self.pack()
label = ttk.Label(self,text="Progressbar")
label.pack(side="left")
self.pbDeterminateVer = ttk.Progressbar(self, orient=HORIZONTAL, length=200, mode='determinate')
self.pbDeterminateVer.pack(side="left")
startbutton = ttk.Button(self,text="start",command = self.startDeterminateVer)
startbutton.pack(side="left")
stopbutton = ttk.Button(self,text="stop",command = self.stopDeterminateVer)
stopbutton.pack(side="left")
#stepを実行する
def startDeterminateVer(self):
self.step()
#stopを実行することで初期化される
def stopDeterminateVer(self):
self.pbDeterminateVer.stop()
#stepの引数にどれだけ進捗を進めるかを指定する
def step(self):
self.pbDeterminateVer.step(10)
if __name__ == '__main__':
#Tkインスタンスを作成し、app変数に格納する
app = Tk()
#縦幅400横幅300に画面サイズを変更します。
app.geometry("600x300")
#タイトルを指定
app.title("ProgressBar Sample Program")
# #フレームを作成する
frame = ProgressBarSampleApp(app)
# 格納したTkインスタンスのmainloopで画面を起こす
app.mainloop()
処理ごとにstep(”進捗”)を実行することでプログレスバーが更新される
サンプルコードではstartを押すことで10づつ加算されていく。
stop()を実行することでキャンセルが可能。
・不確定モード
進捗状況が表せない、実行中を表すタイプのモード

確定モードでプログレスバーを表示するためには
下記のようにmode=’indeterminate’を指定する。
ttk.Progressbar(self, orient=HORIZONTAL, length=200, mode='indeterminate')
下記が不確定モードのサンプルコード
from tkinter import *
import tkinter.ttk as ttk
class ProgressBarSampleApp(ttk.Frame):
def __init__(self, app):
super().__init__(app)
self.pack()
label = ttk.Label(self,text="Progressbar不確定モード")
label.pack(side="left")
self.pbIndeterminateVer = ttk.Progressbar(self, orient=HORIZONTAL, length=200, mode='indeterminate')
self.pbIndeterminateVer.pack(side="left")
startbutton = ttk.Button(self,text="start",command = self.startIndeterminateVer)
startbutton.pack(side="left")
stopbutton = ttk.Button(self,text="stop",command = self.stopIndeterminateVer)
stopbutton.pack(side="left")
#startの引数の値を短くすることでバーの速度が変わる
def startIndeterminateVer(self):
self.pbIndeterminateVer.start(10)
def stopIndeterminateVer(self):
self.pbIndeterminateVer.stop()
if __name__ == '__main__':
#Tkインスタンスを作成し、app変数に格納する
app = Tk()
#縦幅400横幅300に画面サイズを変更します。
app.geometry("600x300")
#タイトルを指定
app.title("ProgressBar Sample Program")
# #フレームを作成する
frame = ProgressBarSampleApp(app)
# 格納したTkインスタンスのmainloopで画面を起こす
app.mainloop()
start()関数を実行することによりバーが動き出す。
stop()を実行することでキャンセルが可能。