見出し画像

Python(kivy)でアプリ開発

育休中の空いた時間で家計簿アプリ開発中。というのも我が家はGoogle spread sheetで家計簿管理しており、集計したのを見るのが大変なのでアプリ開発しよう!と一昨年末に開始したプロジェクト(?)

前回は1年ぶりにアプリ開発しようと環境構築からし直した話だった。。

今回は無事環境が戻ってきたので、開発を進めていく。

Google Spread Sheetから値を取ってきて、グラフ化し、表示するまでのアプリ開発をここで行っていく。アプリ化するためにkivyを導入する。
その際に発生した諸々をメモとして残しておく。(何も面白くないです….)

kivyの環境構築

kivyとはなにか
Pythonのライブラリの一つで、GUI(グラフィカルユーザーインターフェース: 黒いコンソール画面ポチポチじゃない)を簡単に作ることのできるものです。

サルでもできるPython(kivy)でiOSアプリ開発

kivy-iosを動かすための依存パッケージをインストール

xcode-select --install
brew install autoconf automake libtool pkg-config
brew link libtoolk
pip install cython==0.28.1

kivy-iosをクローン

git clone https://github.com/kivy/kivy-ios.git
cd kivy-ios/
pip install -r requirements.txt

python自体をアプリ用にビルド

python3 toolchain.py build python3 kivy

ビルドした際に出たエラー

STDERR:
xcrun: error: SDK "iphonesimulator" cannot be located
xcrun: error: SDK "iphonesimulator" cannot be located
xcrun: error: unable to lookup item 'Path' in SDK 'iphonesimulator'

パスの確認

xcode-select --print-path
/Library/Developer/CommandLineTools
# /Applications/Xcode.app  であるべき

そもそもXcode.appが見つからないのでダウンロードしてきてインストール

xcrun -sdk iphonesimulator --show-sdk-path 
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator11.4.sdk

無事パスは通ったもののkivyがないと言われるのでインストール

from kivy.app import App
ModuleNotFoundError: No module named 'kivy'
python -m pip install kivy

日本語を使えるようにする

pip install japanize-kivy
import japanize_kivy # これを追加するだけ

ボタン押してからグラフが表示されるまでが長い問題

参考サイトをもとに、ボタンを押してからグラフが表示されるまではできたが、処理が長くその間アプリが固まっているように見えてしまう。

グラフ作成中は処理中の画像を挟むような仕様にしたい。

            Button:
                id: button1
                text: "直近3ヶ月"
                font_size: 30
                on_press: root.push_button()
              

kvファイルをこのようにすると pythonのpush_button()関数に入るが、そこで処理中の画像を表示するか、グラフ作成するかのどちらかしか行えない。

かといってthreadingを使って並列処理をするとmatplotlibとの相性が悪いのかsegmentation faultが出てしまう。

            Button:
                id: button1
                text: "直近3ヶ月"
                font_size: 30
                on_press: root.push_button()
                on_release: root.process(3) #追加

on_press でボタンを押した時のイベント発火
on_release でボタンを離した時のイベント発火

なのでこれをうまいこと使って、

on_press で処理中の画像表示
on_release でグラフ作成

と分けたらうまく行った。

最後に

ここに書いてるのはほとんど私がやった時のメモ程度で、、、参考サイトがとてもわかりやすかったので実際にkivy使って開発する方はそちらを参考にしてほしい。

参考サイト


この記事が気に入ったらサポートをしてみませんか?