RaspberryPi2+kivy

2017/11/01

RaspberryPi公認のタッチディスプレイが発売されたので、入手したはいいが、何に使おうか・・・といった状況になっていたので、PythonのGUIフレームワーク?であるkivyに触れてみた。

Pi用kivyイメージを入手

kivypie.mitako.eu

から目的にあったkivy Pieを入手して、Win32DiskImagerとかでOS起動用のSD(micro)を準備する。kivy Pie のバージョン0.6以上は3.5Gに容量が増えてるみたいなので、注意。

Win32DiskImagerで対象となるドライブを間違えないようにね!!

OS起動

ユーザーはsysop
パスワードはposys
でログインできる。

どうやらWiringPiもインストールされているようなので、個別にダウンロード、ビルドする手間が省ける。

kivyに触れる

kivy-exampleの中にdemoディレクトリがあって、その中のshowcaseで動作を覗いてみた。

python main.py

とコンソール上でコマンドを打つと実行できるはず。

基本的には動いているが、spinnerとdropdownの動作がいまいち安定しない。

何かしらの設定が悪いのかも知れないがハマりそうなので、とりあえず放っておく。

それ以外のタッチ感や操作感は特に問題なさそうに感じた。

 Pythonにてコーディング

どうも調べていると、GUIのレイアウトは.kvというkivyのスタイルでコーディングして、制御などの内部処理はPythonで記述するというのが主流のようだが、メンドウなので、レイアウトもPythonで書いてみた。

from kivy.app import App
from kivy.uix.button import Label, Button
from kivy.config import Config
from kivy.core.window import Window

Config.set(graphics, width, 200)
Config.set(graphics, height, 200)

class RootWidget(FloatLayout):
    def __init__(self, **kwargs):
        super(RootWidget, self).__init__(**kwargs)
                self.Sample1Btn = Button(text="Sample1", font_size = "18sp",
                size_hint=(.3, .15), pos_hint={center_x: .2, center_y: .7})
        self.Sample1Btn.bind(on_press=self.Sample1Btncallback)
        self.add_widget(self.Sample1Btn)
    def Sample1Btncallback(self,instance):
        print("Sample1")
class TestApp(App):
    def build(self):
        self.root = root = RootWidget()
        self.title = Test Sample
        return self.root
TestApp().run()

とすると画面左上あたりにbuttonができる。ボタンが押されるとSample1Btncallbackが実行されて、コンソール上にprintの内容が表示される。

日本語フォントの利用(失敗)

buttonに表示する文字を日本語にしたかったので、フォントをダウンロードしてきて、

import kivy
from kivy.resources import resource_add_path
from kivy.core.text import LabelBase, DEFAULT_FONT
resource_add_path(/home/sysop/Mykivy/)
LabelBase.register(DEFAULT_FONT, IPAexfont00301/ipaexg.ttf)

としてデフォルトで日本語フォントを利用するようにしてみたが、表示がblankになってしまい失敗。一瞬真っ黒な文字背景が表示された気がしたが・・・。

さらに、

self.Sample1Btn = Button(text="Sample1", font_size = "18sp",
                font_name = IPAexfont00301/ipaexg.ttf,
                size_hint=(.3, .15), pos_hint={center_x: .2, center_y: .7})

のように個別でフォント指定してみたけど失敗・・・。一体どうしたらRaspberryPi+kivyで日本語表示できるのか・・・。

RaspberryPi2 + kivyは意外と面白い

思っていた以上にRaspberryPi2とkivyの組み合わせが面白かったので、もう少しいじってみる。次はToggleButtonとSliderかな・・・。

---追記---

いちおToggleButton使ってみたので、リンク張っておく。

sunnydays-k.hatenablog.com

sunnydays-k.hatenablog.com

sunnydays-k.hatenablog.com