Kivy は、NUI (Natural User Interface) を持つモバイルアプリやその他のマルチタッチアプリケーションソフトウェアを開発するためのフリーでオープンソースの Python フレームワークです。MIT ライセンスのもとで配布され、Android, iOS, Linux, macOS そして Windows で動作させることができます。
Wikipedia より引用、翻訳、編集
使ったことのなかった Python の GUI ライブラリ(フレームワーク)、Kivy に興味を持ったので [1]、ひととおりウィジェットのサンプルを作ってみようとしています。サンプルを作っていくにあたって、どんなスタイルでコーディングするか、テンプレートみたいなものを固めていこうとあれこれ試し始めました。
今回はチェックボックスのサンプルを紹介します。Python のコードのみと Python と、同じ動作をする UI 部分を分離して Kv 言語で記述したファイルのサンプルを併せて紹介しています。
下記の環境で動作確認をしています。
![]() |
Fedora Linux 36 | x86_64 |
python3 | 3.10.5-2.fc36.x86_64 | |
Kivy | 2.1.0 |
CheckBox (Python)
チェックボックスは、checked と unchecked の2つの状態を持つ特定のボタンです。
kivy_checkbox.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.checkbox import CheckBox | |
Window.size = (200, 200) | |
class KivyCheckBox(BoxLayout): | |
def __init__(self): | |
super().__init__() | |
self.orientation = 'vertical' | |
self.init_ui() | |
def init_ui(self): | |
chb_a = CheckBox() | |
chb_a.bind(active=self.on_checkbox_changed) | |
self.add_widget(chb_a) | |
chb_b = CheckBox() | |
chb_b.bind(active=self.on_checkbox_changed) | |
self.add_widget(chb_b) | |
chb_c = CheckBox() | |
chb_c.bind(active=self.on_checkbox_changed) | |
self.add_widget(chb_c) | |
def on_checkbox_changed(self, instance, value): | |
print('チェックボックス %s は %d です。' % (instance, value)) | |
class ExampleApp(App): | |
def build(self): | |
self.title = 'CheckBoxes' | |
return KivyCheckBox() | |
if __name__ == '__main__': | |
ExampleApp().run() |
kivy_checkbox.py の実行例
kivy_checkbox.py の出力例
[INFO ] [Window ] auto add sdl2 input provider
[INFO ] [Window ] virtual keyboard not allowed, single mode, not docked
[INFO ] [Base ] Start application main loop
チェックボックス <kivy.uix.checkbox.CheckBox object at 0x7fdf3e3db370> は 1 です。
チェックボックス <kivy.uix.checkbox.CheckBox object at 0x7fdf3c6f1000> は 1 です。
CheckBox (Python + Kv)
指定したファイルを読み込むようにしたいので、ここでは Builder.load_file() を使って読み込むようにしています。
kivy_checkbox_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_checkbox_1.kv') | |
Window.size = (200, 200) | |
class KivyCheckBox(BoxLayout): | |
def on_checkbox_changed(self, instance, value): | |
print('チェックボックス %s は %d です。' % (instance, value)) | |
class ExampleApp(App): | |
def build(self): | |
self.title = 'CheckBoxes' | |
return KivyCheckBox() | |
if __name__ == '__main__': | |
ExampleApp().run() |
kivy_checkbox_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
<KivyCheckBox>: | |
orientation: 'vertical' | |
size: root.size | |
CheckBox: | |
id: chb_a | |
active: 0 | |
on_state: root.on_checkbox_changed(self, self.active) | |
CheckBox: | |
id: chb_b | |
active: 0 | |
on_state: root.on_checkbox_changed(self, self.active) | |
CheckBox: | |
id: chb_c | |
active: 0 | |
on_state: root.on_checkbox_changed(self, self.active) |
kivy_checkbox_1.py の実行例
CheckBox グループ化 (Python)
チェックボックスをグループ化するとラジオボタンになります。ラジオボタンでは一度にひとつしか選択できません。
kivy_checkbox_group.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.checkbox import CheckBox | |
Window.size = (200, 200) | |
class KivyCheckBox(BoxLayout): | |
def __init__(self): | |
super().__init__() | |
self.orientation = 'vertical' | |
self.init_ui() | |
def init_ui(self): | |
chb_a = CheckBox(group='chb') | |
chb_a.bind(active=self.on_checkbox_changed) | |
self.add_widget(chb_a) | |
chb_b = CheckBox(group='chb') | |
chb_b.bind(active=self.on_checkbox_changed) | |
self.add_widget(chb_b) | |
chb_c = CheckBox(group='chb') | |
chb_c.bind(active=self.on_checkbox_changed) | |
self.add_widget(chb_c) | |
def on_checkbox_changed(self, instance, value): | |
print('チェックボックス %s は %d です。' % (instance, value)) | |
class ExampleApp(App): | |
def build(self): | |
self.title = 'CheckBoxes (group)' | |
return KivyCheckBox() | |
if __name__ == '__main__': | |
ExampleApp().run() |
kivy_checkbox_group.py の実行例
kivy_checkbox_group.py の出力例
[INFO ] [Window ] auto add sdl2 input provider
[INFO ] [Window ] virtual keyboard not allowed, single mode, not docked
[INFO ] [Base ] Start application main loop
チェックボックス <kivy.uix.checkbox.CheckBox object at 0x7fe223de71b0> は 1 です。
チェックボックス <kivy.uix.checkbox.CheckBox object at 0x7fe223de71b0> は 0 です。
チェックボックス <kivy.uix.checkbox.CheckBox object at 0x7fe22311ce40> は 1 です。
CheckBox グループ化 (Python + Kv)
指定したファイルを読み込むようにしたいので、ここでは Builder.load_file() を使って読み込むようにしています。
kivy_checkbox_group_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_checkbox_group_1.kv') | |
Window.size = (200, 200) | |
class KivyCheckBox(BoxLayout): | |
def on_checkbox_changed(self, instance, value): | |
print('チェックボックス %s は %d です。' % (instance, value)) | |
class ExampleApp(App): | |
def build(self): | |
self.title = 'CheckBoxes (group)' | |
return KivyCheckBox() | |
if __name__ == '__main__': | |
ExampleApp().run() |
kivy_checkbox_group_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
<KivyCheckBox>: | |
orientation: 'vertical' | |
size: root.size | |
CheckBox: | |
id: chb_a | |
group: "chb" | |
active: 0 | |
on_state: root.on_checkbox_changed(self, self.active) | |
CheckBox: | |
id: chb_b | |
group: "chb" | |
active: 0 | |
on_state: root.on_checkbox_changed(self, self.active) | |
CheckBox: | |
id: chb_c | |
group: "chb" | |
active: 0 | |
on_state: root.on_checkbox_changed(self, self.active) |
kivy_checkbox_group_1.py の実行例
参考サイト
- bitWalk's: Kivy をちょろっと使ってみた [2022-07-10]
- Kv language — Kivy 2.1.0 documentation
- Widgets — Kivy 2.1.0 documentation
- CheckBox — Kivy 2.1.0 documentation

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