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