【Python GUIサンプル】TkinterでProgressbar(プログレスバー)を使ってみる

<tkinterトップページに戻る>

プログレスバー

ユーザに対して進捗状況を伝えたり、処理が実行されていることを視覚的に伝えるためのバー

Progressbar

使用するモジュール

ttk.Progressbar

確定モードと不確定モード

・確定モード

進捗状況が加算されていくタイプのモード

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

 

・不確定モード

進捗状況が表せない、実行中を表すタイプのモード

Progressbar_ind

確定モードでプログレスバーを表示するためには

下記のように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()を実行することでキャンセルが可能。

あわせて読みたい