株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

Raspberry Pi

Raspberry PiでKivy2.0.0を導入する

投稿日:2021年5月20日 更新日:

Raspberry PiでKivy2.0.0を導入してみます。Kivyとは、PythonのNUI(Natural User Interface)開発のためのオープンソースライブラリです。(個人的にはNUI開発という表現は説明する時にはGUI開発という表現でもいいかなと思っていますのでGUIという表現を使わせて下さい。)動作環境がマルチプラットフォームになっていて、Raspberry Piだけではなく、様々なOS、プラットフォームに対応しています。

Kivy公式は以下です。

例えばですが、以下のようなGUIが作成出来ます。

このサイトでも以下で取り上げたのですが、随分と時間が経過しました。
Raspberry Piでタッチアプリ開発(その1)ハードウェア構成・開発環境等
Raspberry Piでタッチアプリ開発(その2)Kivyの導入と動作確認
Raspberry Piでタッチアプリ開発(その3)Kivyでレイアウト・ボタン作成
Raspberry Piでタッチアプリ開発(その4)ボタンとGPIOの連動

まあ大きな概念は変わってはいないと思いますが、上記の記事ではKivyのバージョンは、1.9.2でした。今回は、Raspberry Pi4でKivy2.0.0を導入してみます。

Raspberry Pi4の環境は以下から始まる一連の投稿で作成した環境です。

あと、Kivy2.0.0はPython3.6からPython3.9で利用できるようですが、ここでは、現段階でRaspbery PiでのデフォルトのPython3.7を使いました。

今回の導入の手順について
以下のマニュアルページのpipでの最新安定版のインストールを使いました。(やはりソースからビルドするより早いと思いました。)
Installing Kivy using pip

但しですが、このマニュアルではVirtualenvを導入して開発環境を切り分けるようにとありましたが、ここではそのままインストールしました。実際にいろいろな開発環境を構築する際にはVirtualenvを導入するということにします。

もしいろいろな環境が混在する場合は、ぜひこのマニュアルのようにVirtualenvの導入を検討して下さい。

あと、Raspberry Piでの環境設定ということで以下を行いました。
SDL2関連ライブラリの導入
公式タッチパネル用の入力設定(オプション)

それでは、この手順で順番に書きます。動作確認は後にして先にコマンドラインのみで導入作業を全てやります。

Kivy2.0.0のpipでのインストールとアップグレード
ここでは以下のようにインストールしました。現段階の安定版でサンプル関連も含めてです。
$ python -m pip install kivy[base] kivy_examples

無事に完了したら以下でアップグレードをします。
$ sudo apt update
$ sudo apt upgrade

SDL2関連ライブラリの導入
他のLinux環境であれば、以上で完了になるかもしれないですが、Raspberry Pi OSで必要な導入を続けます。(※この段階でRaspberry PiでKivyを実行したら動作しなかったです。)

以下のページを見ながらの作業です。このSDL2関連のライブラリは、Raspberry Pi OSのデスクトップを利用する際に必要なようです。
Installation Raspberry Pi 1-4 Desktop environment

これに従って、以下のようにインストールしました。
$ sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev

問題なく完了しました。

公式タッチパネル用の入力設定(オプション)
タッチパネルは使っていないという場合は不要です。とばして下さい。

以下に従って作業をしました。
Using Official RPi touch display

以下のファイルを編集します。ここまででの作業が問題なく完了していれば以下のファイルが存在しているはずです。
~/.kivy/config.ini

このファイルの[input] セクションを以下のように変更します。
mouse = mouse
mtdev_%(name)s = probesysfs,provider=mtdev
hid_%(name)s = probesysfs,provider=hidinpu

以上で完了です。

ここから実際にKivyの動作確認を行います。

Kivyの導入確認
まだコマンドライン環境です。

python3の配下で、import kivy で確認しました。Pythonのバージョンが、v3.7.3でKivyが、v2.0.0と確認出来ました。

デモアプリの起動
ここからGUI環境です。デモアプリを実行します。以下、フルパスで実行します。
$ python3 ~/.local/share/kivy-examples/demo/showcase/main.py

以下のようなKivyのデモアプリが起動されました。

マウス操作も出来ました。

自分のHello Worldアプリを作成して実行してみます。

hellokv.kvというファイル名で以下を記述します。

Label:
    font_size:'32sp'
    text: 'Hello KV World!'

hellokv.pyというファイル名で以下を記述します。

from kivy.app import App

class HelloKVApp(App):
    pass

if __name__ == '__main__':
    HelloKVApp().run()

以上のファイルを同一のディレクトリで作成して以下で実行します。
$ python3 hellokv.py

以下のように無事に表示されました。

日本語の表示
以下で書いた方法をまた使います。

Takaoフォント(IPA フォントからの派生フォント)のインストール
以下でインストールします。
$ sudo apt-get install fonts-takao

インストールされた場所を確認します。
$ fc-list | grep takao

この中でTakao Pゴシックを使ってみます。kvファイルでこのフォントを指定します。

Label:
    font_size:'32sp'
    font_name: '/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf'
    text: '日本語を表示'

以下のように表示されました。

Widgetのデフォルトのフォントという意味で以下の指定が出来ます。

<Widget>:
    font_name: '/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf'

<MyWidget>:
Label:
    font_size:'36sp'
    text: '日本語を表示'

タッチパネルでの動作確認
最後に(公式ではないですが)タッチパネルでの動作確認を行います。

以下のようなテストプログラムを用意しました。Pythonファイルへ全て記述する書き方です。BoxLayoutを使ってテキストとボタン2個を配置しています。

from kivy.config import Config
Config.set('graphics', 'width', '450')
Config.set('graphics', 'height', '300')

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button

class MainApp(App):
    def __init__(self):
        super().__init__()
        self.label = Label(text="", font_size=32)
        self.button1 = Button(text="button1", font_size=24, on_press=self.pressed)
        self.button2 = Button(text="button2", font_size=24, on_press=self.pressed2)

    def pressed(self, *args):
        self.label.text = "Hello World"

    def pressed2(self, *args):
        self.label.text = "Hello All"

    def build(self):
        boxlay = BoxLayout(orientation="vertical")
        boxlay.add_widget(self.label)
        boxlay.add_widget(self.button1)
        boxlay.add_widget(self.button2)
        return boxlay

if __name__ == '__main__':
    MainApp().run()

ボタンをタッチするとラベルの表示が変わるというテストプログラムです。
静止画像ですが以下は7インチのタッチパネルです。実際に動作してタッチで表示が変わりました。タッチの精度を上げるにはキャリブレーションが必要になりますが、少なくともタッチに反応しました。

以上で動作確認完了です。

最後にまとめ的に
Kivy2.0.0を導入して動作確認まで出来ました。バージョン2.0.0となりましたが、基本的な部分はそれ程変わっていないと思いました。実際にレイアウトを作成してみて、GUIを使うとどうかなというところです。

Raspberry PiでPythonでのGUIライブラリはもちろん他にもあります。そのあたりも含めてまた書きたいと思います。今回はここまでです。

AdSense

AdSense

-Raspberry Pi

執筆者:

関連記事

Raspberry Piをモニターとキーボードなしで導入する(2021年5月版 その2)SSH接続とWifiの設定からログインまで

今現在(2021年5月)の方法でRaspberry Piをヘッドレス(モニターとキーボードなしの状態)で導入する方法について書いています。前回は全体概要からSDカードの作成まで書きました。今回は作成し …

Raspberry PiでC言語版Lチカを試す(その2)レジスタを操作する

Raspberry PiでC言語を使ったLEDの点灯、消灯(いわいるLチカ)を試してみました。今回は2回目です。前回デバイスドライバを利用する方法を書きました。今回はレジスタを直接操作する方法を使いま …

無線マイコン ToCoStick(トコスティック)をRaspberry Piで使ってみた

無線マイコンの ToCoStick(トコスティック)をRaspberry Piで使ってみました。前回の記事でブレッドボードが親機でToCoStickが子機という設定でとりあえずということで通信が出来る …

Raspberry Piでタッチアプリ開発(その2)Kivyの導入と動作確認

Raspberry Piでタッチアプリ開発の2回目です。前回はハードウェア構成や開発環境等の概要的なことを書きました。今回から具体的な内容ですが、まずpythonのNUIライブラリのKivyの導入につ …

Raspberry PiでのNode.jsの導入(その2)Webサーバ的なプログラム

Raspberry PiでのNode.jsの導入の2回目です。前回はインストールと動作確認でした。今回はもう少しWebサーバ的なプログラムを作成してみます。今現在で日本のNode.jsの公式ページにも …