本記事の内容
kivyを利用したpythonアプリの開発で困ったことと解決策を備忘として記載する。
環境(2020/04/04時点)
OS:macOS Catalina 10.15.3
kivyが使用するpythonのバージョン:3.6.5(Kivy3.appに入っているもの)
toolchain.py recipesが表示するpython3のバージョン:3.7.1(おそらく異なっていても問題ない)
kivyのバージョン:1.10.1
事象:toolchain.py recipesで表示されるkivyのバージョンがおかしい
事象詳細
kivy-iosをgit cloneした直後にtoolchain.py recipesを実行すると、kivyのバージョンが18f37ed6e29620ee53c2a7699e0e0894e06a7f91と表示される。
起きていること
kivy ver1.11.1のリビジョン番号(正確にはリビジョン番号ではないが)が表示されている。
解決方法
kivy-ios/recipes/kivy/__init__.pyにバージョンがベタ書きされているので、(例えば1.10.1などに)修正する。
※特にやらなくてもよいかもしれない(私は気持ち悪く感じたので修正した)。
事象:kivyが実行できない(import XXXができない)
事象詳細
ModuleNotFoundError: No module named 'kivy._clock'と表示される
起きていること
(エラーメッセージによると)cythonのコンパイルができていないらしい。
解決方法
原因がよく分からなかったが、Kivy3.appを一旦全削除して再度入れ直したら発生しなくなった。
事象:kivyのモジュールがimportできない
事象詳細
ある特定のモジュール(例えばkivy.uix.listviewなど)がimportできない
起きていること
何らかの理由により、Kivy3.app内にモジュールが格納されていない。
※モジュール使用非推奨の為モジュールを格納しなくなった、という理由が本線か。
解決方法
masterから持ってくる。
https://github.com/nuigroup/kivyをgit cloneして、必要なファイルをコピーすればよい。
Kivy3.appをApplicationsにコピーしたのであれば、コピー先は/Applications/Kivy3.app/Contents/Resources/kivy配下にある。
※モジュール使用非推奨の可能性もある為、ソースコード改修の方がよいかもしれない。
事象:_trigger_reset_populateが使えない
事象詳細
エラーメッセージは消してしまっったが、_trigger_reset_populate項目がないみたいなことを言われる
起きていること
(おそらく)ListViewが使えなくなった。
※筆者は開発の途中でkivyのバージョンを上げた為。
解決方法
ListViewの代わりにRecycleViewを使用する。
ここにサンプルがある。
self.rv.dataは辞書型を要素に持つリストなので、表示したい値が複数種類存在する場合はvalueと同様に辞書型項目に格納して渡せばよい。
事象:RecycleViewのデフォルト位置が一番上ではない。
事象詳細
RecycleViewを一度表示、少しスクロール、戻る、またRecycleViewを表示、とすると、
いちばん上を表示して欲しいが、一度スクロールした場所をデフォルトで表示してしまう。
起きていること
省略。
解決方法
RecycleViewのscroll_yに1を設定する。
これでRecycleViewを表示すると常に一番上が表示されるようになる。
事象:フォントの設定が反映されない
事象詳細
こちらの手順通りにデフォルトフォントを設定しても、反映されない。
※デフォルトフォントの初期値はRoboto
起きていること
よく分からない。
解決方法
[2020/06/14]
解決した。
ダウンロードパス/IPAexfont00301の箇所はipaexg.ttfのファイルが存在するパス"のみ"を記載する。
Configファイルで設定する方法も試したが、これだとiPhoneに実機転送した際に上手くいかない様子。