SlideShare a Scribd company logo
「Kivyによるアプリケーショ
ン開発のすすめ」
オカザキ
自己紹介
• オカザキ
• 職業:プログラマー
• http://twitter.com/dario_okazaki
• Kivyの公式マニュアルの翻訳を
有志でしています
(https://pyky.github.io/kivy-doc-ja/)
目次
• Kivyとは
• 今日の内容
• kivyの機能について
• kivyの4つの壁
• kivyのよい点と悪い点
• まとめ
• おまけ
検証環境
• Windows10
• Python3.5
• Kivy1.10
コードについて
• GITHub:https://github.com/okajun35/kivy_pyconjp
2017
• Slide:https://www.slideshare.net/secret/45D5Wuy
6FWI3X5
※コードの詳しい説明は今回はしません。
コードの詳しい説明は後日webで公開予定
このスライドは配布用です。本番はGitHub上に
あるKivyで作成したスライドで実施します
Kivyとは(1/2)
• PythonでGUIを作成するツール
• Python2/3対応
• マルチプラットフォーム(Win,Mac,Linux,RaspberryPi,android,ios)
• マルチタッチ対応
• Kv LanguageというUIを記述するメタ言語がある
• MITライセンス
Kivyとは(1/2)
• GitHub上( https://github.com/kivy/kivy )でコード
が公開されている
• 2017年現在、開発は盛んにおこなわれている
kivyの知名度(1/2)
• Python3.6から公式の「グラフィックユーザインタ
フェース FAQ」にも紹介されている
kivyの知名度(2/2)
• 「AweSome Python」 ではGUIの部門で1位
今日の内容
「Kivyで何ができるか」の紹介
Kivyで作れるアプリケーション
公式で出しているAndroidアプリがあるので
それをインストールして試してみる。
※Android端末がなくても「kivy_examples」を
インストールして、実行すれば試せます。
Kivy Showcase
• Kivy Showcas
(https://play.google.com/store/apps/details?id=org.kivy.showcase)
• UI(widget)の一覧とコードが読める
Kivy Touchtracer
• Kivy Touchtracer
(https://play.google.com/store/apps/details?id=org.kivy.touchtracer)
• タッチの軌跡を描画する
• マルチタッチ対応
Kivyの構造
• GraphicはOpenGL ESで描画
• 入力などはSDLで制御
※Windowsはver1.10でANGLE(OpenGl ESの
DirectX実装)が選択できるようになった
Kivyのファイル構造
① Pythonファイル(機能部分)とKVファイル
(UI)の2つ
② Pythonファイルのみ
1. KV言語が内部で記載されている
2. Pythonのみで構成
Kivyの機能について
ここで説明するのはごく一部の機能です
Widget
画面を構成するパーツ
• Label
• Image
• Button
etc…
Layout
画面のレイアウト
• BoxLayout
• GridLayout
• Float Layout
etc…
レイアウトの基本
• 「Layout」と「Widget」を組み合わせて作る
• 位置とサイズの指定は2パターンある
• 絶対的な指標で指定: 「pos」、[size」
• 画面サイズからの相対的な比率で指定: 「pos_hint」「size_hint」
• 優先度は「hint」で決まるサイズが優先的に決まる
• 「Layout」の基本は「BoxLayout」
• 「BoxLayout」を組み合わせると大体のレイアウトはできる
• 「Label」などの文字のサイズは動的に変更する仕組みがない・・・
文字、画像の表示
文字、画像の表示(size_hint)
Event
動作に紐づく命令を実行する
• On_Press
• On_Relese
etc…
Property
widgetの値を参照する
• NumericProperty
• ringProperty
• ListProperty
etc…
ボタンの使用
ボタンとレイアウトの使用例(1/2)
ボタンとレイアウトの使用例(2/2)
https://github.com/kiok46/Kivy-Calender
Kivy Language
• KV Languageともいう
• UI用のメタ言語
• Widget(UI)を簡単に記述できる
• CSSとBootstrap(グリッド)の概念にちかい
※KVを使用しなくてもUIは作れるが使用したほうがコードが簡潔にかける。
Animation
• 動きを付ける
• start
• stop
使用例:メニューの表示などに使う
Animationの使用
Clock
• 繰り返しや定期的な動作を行う
• schedule_interval
• schedule_once
etc…
繰り返し(時計)
繰り返し(ストップウォッチ)
実例(時計2)
そのほかの機能1
• スライド
• Carousel:ヘッダー,フッターは固定
• ScreenManager:画面全体が動く
※このスライドはScreenManagerによって作成されています
そのほかの機能2
• ファイル選択
• ドラッグ&ドロップ
etc…
Kivyにはこの他にもたくさんの機能があります
ファイル選択
ドラッグ&ドロップ
ドラッグ&ドロップ
Garden
拡張機能。個別にインストールする。
• 地図表示
• グラフ描画
etc…
地図表示
• mapview(https://github.com/kivy-garden/garden.mapview)
• OpenStreetMapを使用。
• マーカーを表示
mapview
グラフ描画
• Kivyの機能のみで実装する
• Graph(https://github.com/kivy-garden/garden.graph)
※スライドに組み込むには改造する必要あり。
https://github.com/kivy-garden/garden.graph/issues/7
• matplotlbを使用する
• matplotlib(https://github.com/kivy-garden/garden.matplotlib)
• 動作が重い
• パッケージ化の際に難易度がます
グラフ(garden.glah)
グラフ(matplotlib)
デスクトップアプリの方法
• PyInstaller(http://www.pyinstaller.org/)を使用
• 使用方法はKivyの公式マニュアル(翻訳済み)を参考※
(https://pyky.github.io/kivy-doc-ja/guide/packaging.html)
• オプションでいろいろできる
• 依存関係の設定などコツがいる
• 起動が重い
※MacOSのみ翻訳が公式より古いので、MacOSの場合は
公式を見てください
Androidアプリの作成
• Kivy Launcher
• (GooglePlayから入手)
• Pythonコードによるプレビューツール
• バックグラウンドでも動作可能
• 実行時のログ出力対応
• Pyhon2系のみ対応
• Kivy1.9.1対応で最新版には対応していない
• Buildozer(UbuntuによるVM)でのapk作成
• Python2/3系対応
• Plyer: Pythonラッパーのプラットフォーム非依存API群
• Pyjnius: PythonからJava / Android APIへ動的アクセスを
する
androidアプリの作成2
androidの開発手順は以下が理想
① PCで開発
② android端末にコードを転送
③ Kivy Launcherで動作確認
④ Buildozerでapk作成
⑤ apkでの動作確認
⑥ PlayStoreにリリース
iosアプリの作成
• Python2系のみ対応※
• toolchainを使用してXcode用のプロジェクトを
作成する
• Pyobjus:動的にiosのAPIにアクセス
※Python3系の対応は有志によって開発中
Python 3 support #184(https://github.com/kivy/kivy-ios/issues/184)
kivy Lancherでの実演
• 国会図書館の検索APIを使用して書籍検索する
• UrlRequest()を利用して非同期でリクエストを
送受信する
クロスプラットフォームについて
• どのデバイスまで視野にいれるかの検討が必要
クロスプラットフォームの一覧
※2019年をめどにすべてのデバイスでPython3系対応
およびPython2系の対応廃止予定
(https://github.com/kivy/kivy/wiki/Kivy-Python-2-Support-Timeline)
Kivyについて
GUIツールとしての機能は一通りそろっている
Kivyの4つの壁
①情報が少ない
②インストール
③KV Language
④日本語入力(IME)
①情報が少ない(1/4)
• 日本語の情報は特に少ない
• 存在していても日本語の情報は古いものがある
• 環境構築系は参考にしない方がいい
• コミュニティがないのでわからなくても聞く
人がいない
①情報が少ない(2/4)
• 公式サイト(英語) (https://kivy.org/docs/)
• 公式の翻訳
(https://pyky.github.io/kivy-doc-ja/)
※最初のうちは両方開いて比較するとよい
※翻訳の協力者募集中
①情報が少ない(4/4)
• StackOverflow(https://stackoverflow.com/)
• Google翻訳使えばなんとなくわかる
書籍(洋書だが国内でもAmazonで購入可能)
• Creating Apps in Kivy (O‘Reilly)
• Kivy :Interactive Applications and Games in Python
-Second Edition
• Kivy Blueprints
※コードはwebで無料で見れる
②インストール
• WindowsOSだとOpenGLとSDLなど依存関係のせい
でpipでインストールできない場合がある
• Python2.7/3.4について
• 公式どおりで大丈夫
• 3.5以上をインストール
• VisualStudio2015をインストール。
• glutを配置しないとインストールできない
• インストールがうまくいかない場合
• 非公式パッケージのインストールをお勧めします
(http://www.lfd.uci.edu/~gohlke/pythonlibs/#kivy)
• MacOSでもPython3.6だとうまく動作しない場合が
ある
③KV Language
kivy独自の概念なので理解するのに時間がかかる
• kviewerを使うとリアルタイムに変更が確認できる
※Python3系だとコードを書きなおす必要があるのと反映されるのはkvファイル側の記述であるところが
注意
Pythonファイル側の設定は反映されない
• Inspector()
• 「 -m inspector」 を実行時の引数につける
• widegetを選択してPropertyの値、親子関係を確認できる
• Python側でwidget内部にブレイクポイントをはって
widgetの構成を調べる
• Atomやsublimeなどだと3rdPartyによる入力補完が可能
③KV Language(kviewer)
「python -m kivy.tools.kviewer <kvファイル>」で実行
• Python3系だとKivy本体のソースを修正しないとエ
ラーになって起動しない
(http://qiita.com/gotta_dive_into_python/items/c32cd
cb58c66f0a1b840)
③KV Language(Inspector)
「python ./main.py -m inspector」で実行
• 「Ctr+e」でメニューがでる
④日本語入力(IME)2
• windows/mac/iosだと日本語入力中のIMEが表示されな
い
• SDL側の入力イベントをキャッチしていないのが原因
(http://qiita.com/dario_okazaki/items/8c6953166b336e83e417)
• @sou_anさんがプルリクしたが採択されていない。
「Add textedit event for text editing by IME #5109」
※個人で直すとcythonによるビルドが必要
SDL2のライブラリーが必要なのでビルド環境を作るのは難しい
④日本語入力(IME)2
Kivyのここがダメ
• 位置やサイズの指定がわかりにくい(pos_hint,size_hint)
• 公式マニュアルで大事なことがちゃんと書いていない・・・
• わかっている人がわかっている人に向けて書いている
• チュートリアルがあんまりよくない
• アニメーションとマルチタッチのチュートリアルであってKv
Languageのチュートリアルではない
• Kivyの正しい書き方がよくわからない
• 起動が重い
• OpenGL ESで描画しているので起動時間など非力なPCだと時間ががかる
Kivyのいいところ
• Pythonで書ける
• 簡潔に書ける
• Kivy Languleage
• 機能とUIが分離できるので見やすい
まとめ
• 簡単なアプリならすぐに作れる
• 開発は今も盛んにおこなわれている
• Kivy Languageを使うことでUIと機能が簡潔かける
• 日本語入力に問題がある
• 原因と対策はある程度見えているのでいずれできる
• モバイル開発ならPython2系
おまけ1
• Kvファイルの分割について
以下のやり方でKvファイルを読みだすことでき、
Kvファイルを分割できます
• Kvファイルないで「#:include <KVファイル>」
• Pythonファイル内で「load_file(<Kvファイル>)
おまけ2
• Kivy MD
• Google material designに準拠するwidgetのコレクション
(https://gitlab.com/kivymd/KivyMD)
• モバイルでのレイアウトに向いている
• 起動がKivy単体より重くなる

More Related Content

PPTX
GitLab CI/CD パイプライン
PPTX
世界一わかりやすいClean Architecture
PDF
Gitはじめの一歩
PDF
ROS を用いた自律移動ロボットのシステム構築
PDF
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
PDF
はじめてのGit forデザイナー&コーダー
PDF
ノンプログラマでも今日から使える「Git」でバージョン管理
PDF
Intel RealSense for ROSConJP20221121.pdf
GitLab CI/CD パイプライン
世界一わかりやすいClean Architecture
Gitはじめの一歩
ROS を用いた自律移動ロボットのシステム構築
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
はじめてのGit forデザイナー&コーダー
ノンプログラマでも今日から使える「Git」でバージョン管理
Intel RealSense for ROSConJP20221121.pdf

What's hot (20)

PDF
MagicOnion入門
PPTX
SSII2020TS: 物理ベースビジョンの過去・現在・未来 〜 カメラ・物体・光のインタラクションを モデル化するには 〜
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
Railsで作るBFFの功罪
PDF
TDD のこころ
PDF
テスト駆動開発へようこそ
PDF
インフラエンジニアってなんでしたっけ(仮)
PPTX
脱RESTful API設計の提案
PDF
WPF開発での陥りやすい罠
PDF
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
PDF
いつやるの?Git入門
PPTX
論文に関する基礎知識2015
PPTX
JIRA / Confluence の 必須プラグインはこれだ
PDF
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
PDF
チケット駆動開発の解説~タスク管理からプロセス改善へ
PDF
ユーザーインタビューするときは、どうやらゾンビのおでましさ
PPTX
ドメイン駆動設計とマイクロサービス
PDF
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
PDF
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
PDF
ROS2勉強会 4章前半
MagicOnion入門
SSII2020TS: 物理ベースビジョンの過去・現在・未来 〜 カメラ・物体・光のインタラクションを モデル化するには 〜
ドメイン駆動設計 ( DDD ) をやってみよう
Railsで作るBFFの功罪
TDD のこころ
テスト駆動開発へようこそ
インフラエンジニアってなんでしたっけ(仮)
脱RESTful API設計の提案
WPF開発での陥りやすい罠
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
いつやるの?Git入門
論文に関する基礎知識2015
JIRA / Confluence の 必須プラグインはこれだ
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
チケット駆動開発の解説~タスク管理からプロセス改善へ
ユーザーインタビューするときは、どうやらゾンビのおでましさ
ドメイン駆動設計とマイクロサービス
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
ROS2勉強会 4章前半
Ad

Viewers also liked (11)

PPTX
Kivyでゲーム
PPTX
「Kivyによるアプリケーション開発のすすめ」の勧め
PDF
ビットコインアドレス生成のロジック
PPTX
自動売買プログラムの作り方
PDF
PyCon JP 2017Yuta Kitagami
PDF
2017-08-22 Python×Djangoで作るHR Techサービスのメリット・デメリット
PDF
Redash pythonで業務分析
PPTX
暗号通貨勉強会
PDF
PyQtではじめるGUIプログラミング
PPTX
簡単、クレカ決済! PAY.JPを使ったクレカ決済の仕組み・開発運用時の考慮点について
PDF
AWS Black Belt Online Seminar 2017 Amazon Athena
Kivyでゲーム
「Kivyによるアプリケーション開発のすすめ」の勧め
ビットコインアドレス生成のロジック
自動売買プログラムの作り方
PyCon JP 2017Yuta Kitagami
2017-08-22 Python×Djangoで作るHR Techサービスのメリット・デメリット
Redash pythonで業務分析
暗号通貨勉強会
PyQtではじめるGUIプログラミング
簡単、クレカ決済! PAY.JPを使ったクレカ決済の仕組み・開発運用時の考慮点について
AWS Black Belt Online Seminar 2017 Amazon Athena
Ad

Similar to PyconJP2017 Kivyによるアプリケーション開発のすすめ (20)

PPTX
oFの話題が殆ど出ない oF jp Summer Workout
PPTX
Kivy studies
PPTX
SCM, CI and Maven Repo
PPTX
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
PDF
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
PDF
pythonでつくるiPhoneアプリ
PDF
SwiftとCocoaPodsで始めるサクサクiOS開発!
PPTX
Multibranch Pipeline with Docker 入門編
PPTX
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
PDF
今時のオンプレなgithubクローン環境構築
PDF
Rubyistがgemの前にPypiデビューするのは間違っているだろうか
PDF
VSCode Conference Japan 2021 kyusque
PDF
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
PDF
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
PDF
PythonのGUI_2018 with NSEG
PDF
コロナ禍の開発勉強会~社内教育ツールの開発と実装
 
PDF
GitHub Copilotとともに次の開発体験へ
PDF
[20130624]最近の開発環境について話してみる sakata
PDF
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
KEY
Yapc2012資料
oFの話題が殆ど出ない oF jp Summer Workout
Kivy studies
SCM, CI and Maven Repo
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
地味だけど劇的に便利になるGitHubリポジトリ設定あれこれ
pythonでつくるiPhoneアプリ
SwiftとCocoaPodsで始めるサクサクiOS開発!
Multibranch Pipeline with Docker 入門編
Dockerで始める Java EE アプリケーション開発 for JJUG CCC 2017
今時のオンプレなgithubクローン環境構築
Rubyistがgemの前にPypiデビューするのは間違っているだろうか
VSCode Conference Japan 2021 kyusque
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Azure Functions 開発デプロイ環境を GitHub Codespaces で爆速に整える
PythonのGUI_2018 with NSEG
コロナ禍の開発勉強会~社内教育ツールの開発と実装
 
GitHub Copilotとともに次の開発体験へ
[20130624]最近の開発環境について話してみる sakata
[DockerConハイライト] OpenPubKeyによるイメージの署名と検証.pdf
Yapc2012資料

PyconJP2017 Kivyによるアプリケーション開発のすすめ