Kivy は、NUI (Natural User Interface) を持つモバイルアプリやその他のマルチタッチアプリケーションソフトウェアを開発するためのフリーでオープンソースの Python フレームワークです。MIT ライセンスのもとで配布され、Android, iOS, Linux, macOS そして Windows で動作させることができます。
Wikipedia より引用、翻訳、編集
使ったことのなかった Python の GUI ライブラリ(フレームワーク)、Kivy に興味を持ったので [1]、ひととおりウィジェットのサンプルを作ってみようとしています。サンプルを作っていくにあたって、どんなスタイルでコーディングするか、テンプレートみたいなものを固めていこうとあれこれ試し始めました。
今回はスライダーのサンプルを紹介します。
Python のコードのみのサンプルと、UI 部分を分離して Kv 言語で記述した同じ動作をするサンプルを併せて紹介しています。
下記の環境で動作確認をしています。
![]() |
Fedora Linux 36 | x86_64 |
python3 | 3.10.5-2.fc36.x86_64 | |
Kivy | 2.1.0 |
Slider (Python)
スライダーは、スクロールバーのようなウィジェットです。水平方向と垂直方向の配置、最小値/最大値、デフォルト値の設定をサポートしています。
kivy_slider.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import japanize_kivy | |
from kivy.app import App | |
from kivy.core.window import Window | |
from kivy.uix.boxlayout import BoxLayout | |
from kivy.uix.label import Label | |
from kivy.uix.slider import Slider | |
Window.size = (200, 200) | |
class KivySlider(BoxLayout): | |
lbl: Label = None | |
def __init__(self): | |
super().__init__() | |
self.orientation = 'vertical' | |
self.init_ui() | |
def init_ui(self): | |
sld = Slider(min=0, max=100, step=1, value=0) | |
sld.bind(on_touch_down=self.on_slider_move) | |
sld.bind(on_touch_move=self.on_slider_move) | |
sld.bind(on_touch_up=self.on_slider_move) | |
self.add_widget(sld) | |
self.lbl = Label(text=str(sld.value)) | |
self.add_widget(self.lbl) | |
def on_slider_move(self, instance, value): | |
self.lbl.text = str(instance.value) | |
print('スライダーの値は %.2f です。' % instance.value) | |
class ExampleApp(App): | |
def build(self): | |
self.title = 'Slider' | |
return KivySlider() | |
if __name__ == '__main__': | |
ExampleApp().run() |
kivy_slider.py の実行例
kivy_slider.py の実行例
[INFO ] [Window ] virtual keyboard not allowed, single mode, not docked [INFO ] [Base ] Start application main loop [INFO ] [GL ] NPOT texture support is available スライダーの値は 0.00 です。 スライダーの値は 38.00 です。 スライダーの値は 38.00 です。 スライダーの値は 38.00 です。 スライダーの値は 38.00 です。 スライダーの値は 39.00 です。 スライダーの値は 39.00 です。 スライダーの値は 40.00 です。 スライダーの値は 40.00 です。 スライダーの値は 41.00 です。 スライダーの値は 41.00 です。 スライダーの値は 42.00 です。 スライダーの値は 42.00 です。 スライダーの値は 43.00 です。 スライダーの値は 43.00 です。
Slider (Python + Kv)
指定したファイルを読み込むようにしたかったので、ここでは Builder.load_file() を使って、指定したファイルを読み込むようにしています。
kivy_slider_1.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import japanize_kivy | |
from kivy.app import App | |
from kivy.core.window import Window | |
from kivy.lang import Builder | |
from kivy.uix.boxlayout import BoxLayout | |
Builder.load_file('kivy_slider_1.kv') | |
Window.size = (200, 200) | |
class KivySlider(BoxLayout): | |
def on_slider_move(self, instance, value): | |
print('スライダーの値は %.2f です。' % instance.value) | |
class ExampleApp(App): | |
def build(self): | |
self.title = 'Slider' | |
return KivySlider() | |
if __name__ == '__main__': | |
ExampleApp().run() |
kivy_slider_1.kv
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<KivySlider>: | |
orientation: 'vertical' | |
size: root.size | |
Slider: | |
id: sld | |
min: 0 | |
max: 100 | |
step: 1 | |
value: 0 | |
on_touch_down: root.on_slider_move(self, self.value) | |
on_touch_move: root.on_slider_move(self, self.value) | |
on_touch_up: root.on_slider_move(self, self.value) | |
Label: | |
id: lbl | |
text: str(sld.value) |
kivy_slider_1.py の実行例
今回は、Python のみで記述した場合と、UI の部分を Kivy 言語で記述した場合で、動作は同じものの、ラベルに現在値を表示する部分の記述内容に違いが出てしまいました。経験が浅いせいで知らないことがあるのかもしれません。
参考サイト
- bitWalk's: Kivy をちょろっと使ってみた [2022-07-10]
- Kv language — Kivy 2.1.0 documentation
- Widgets — Kivy 2.1.0 documentation
- Slider — Kivy 2.1.0 documentation

にほんブログ村
0 件のコメント:
コメントを投稿