[Kivy]kivy.uix.progressbarによる進捗表示

kivy.uix.progressbarによる進捗の表示

 kivy.uix.progressbar(以下、ProgressBarという)は、Kivyでタスクの進捗情報を表示するためのWidgetであり、時間を要するタスク(複数の場合もあり)を処理している場合に、ユーザーに処理の進捗状況を伝えることで、処理が適切に行われていることを伝えるとともに処理が終了するまでの時間を予想する手助けをおこなうものです。

 今回は、ProgressBarの作成方法と進捗状況の表示、更新の方法について紹介します。

今回紹介する内容
 ・ ProgressBarを作成する
 ・ ProgressBarで進行状況を表示する
 ・ ProgressBarで進行状況を変更する

kivy.uix.progressbarの作成と設定

ProgressBarを作成する

 ProgressBarは、kv langでは以下のように記入して作成します。

            ProgressBar:
                id: pb1

ProgressBarで進行状況を表示する

 ProgressBarの進行状況は、①maxとvalueもしくは②value_normalizedの値によって指定します。①maxとvalueの場合は、maxに対するvalueの割合が進行状況として示され、②value_normalizedでは、進行状況を0〜1の数値で指定します。

    def __init__(self, **kwargs):
        super(MainDisp, self).__init__(**kwargs)
        self.ids.pb1.max = 100
        self.ids.pb1.value = 0
        self.ids.pb2.value_normalized = 0

ProgressBarで進行状況を変更する

 ProgressBarの進行状況の変更は、valueの値(最大値:maxで指定した値)やvalue_normalized(最大値:1)を変更することでおこないます。

    def on_release(self):
        self.ids.pb1.value += 20
        self.ids.pb2.value_normalized += 0.2

サンプルプログラム

 サンプルプログラムを実行すると2つのProgressBar(左側にLabelを配置)とButtonが表示されます。Buttonを押すと、2つのProgressBarのバーが最大になるまで伸びていきます。

# -*- coding: utf-8 -*-

import kivy

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.config import Config

kivy.require('2.2.0')

Config.set('graphics', 'width', '600')
Config.set('graphics', 'height', '500')


Builder.load_string('''

<MainDisp>
    BoxLayout:
        size: root.size
        padding: 20
        orientation: 'vertical'

        BoxLayout:
            size: root.size
            padding: 20

            Label:
                text: 'value, max'
                size_hint_x: 0.4

            ProgressBar:
                id: pb1

        BoxLayout:
            size: root.size
            padding: 20

            Label:
                text: 'value_normalized'
                size_hint_x: 0.4

            ProgressBar:
                id: pb2

        BoxLayout:
            size: root.size
            padding: 20

            Button:
                id: button
                text: 'progressbar up'
                on_release: root.on_release()
''')


class MainDisp(Widget):

    def __init__(self, **kwargs):
        super(MainDisp, self).__init__(**kwargs)
        self.ids.pb1.max = 100
        self.ids.pb1.value = 0
        self.ids.pb2.value_normalized = 0

    def on_release(self):
        self.ids.pb1.value += 20
        self.ids.pb2.value_normalized += 0.2


class MainDispApp(App):
    def __init__(self, **kwargs):
        super(MainDispApp, self).__init__(**kwargs)
        self.title = 'kivy_progressbar'

    def build(self):
        return MainDisp()


if __name__ == '__main__':
    app = MainDispApp()
    app.run()
タイトルとURLをコピーしました