【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()を実行することでキャンセルが可能。