PythonのGUIライブラリであるKivyのexampleですが、公式マニュアルのGetting Started(翻訳済み) » Examples(翻訳済み)やGallery of Examples(翻訳済み) » Gallery(翻訳済み)で紹介がありますが、紹介されていない項目やExamples(翻訳済み)だと文章のみの紹介で実行時の画像がないため、どんなものがあるかわかりにくいです。
各内容のスクリーンショットと簡単な紹介をまとめたのでkivyでどんなものが作れるか、また作る際の参考になれば幸いです。
個人的なお勧めは、「showcase」、「multistroke」、「note」です。このあたりはコードを見てみて一度動かしてみることをお勧めします。
exampleのフォルダ/ファイル構成
exampleのフォルダ/ファイル構成は以下の通りです。
├─3Drendering
│ main.py
│ monkey.obj
│ objloader.py
│ simple.glsl
│
├─android
│ ├─compass
│ │ android.txt
│ │ compass.kv
│ │ main.py
│ │ needle.png
│ │ rose.png
│ │
│ └─takepicture
│ android.txt
│ buildozer.spec
│ main.py
│ shadow32.png
│ takepicture.kv
│
├─animation
│ animate.py
│
├─application
│ │ app_suite.py
│ │ app_with_build.py
│ │ app_with_kv.py
│ │ app_with_kv_in_template1.py
│ │ test.kv
│ │ testkvfile.kv
│ │
│ ├─app_suite_data
│ │ testkvdir.kv
│ │
│ └─template1
│ test.kv
│
├─audio
│ 12908_sweet_trip_mm_clap_hi.wav
│ 12909_sweet_trip_mm_clap_lo.wav
│ 12910_sweet_trip_mm_clap_mid.wav
│ 12911_sweet_trip_mm_hat_cl.wav
│ 12913_sweet_trip_mm_kick_hi.wav
│ 12914_sweet_trip_mm_kick_lo.wav
│ 12915_sweet_trip_mm_kick_mid.wav
│ 12916_sweet_trip_mm_kwik_mod_01.wav
│ 12917_sweet_trip_mm_kwik_mod_02.wav
│ 12918_sweet_trip_mm_kwik_mod_03.wav
│ 12919_sweet_trip_mm_kwik_mod_04.wav
│ 12920_sweet_trip_mm_kwik_mod_05.wav
│ 12921_sweet_trip_mm_kwik_mod_06.wav
│ 12922_sweet_trip_mm_kwik_mod_07.wav
│ 12923_sweet_trip_mm_metal_clave.wav
│ 12925_sweet_trip_mm_sweep_x.wav
│ 12926_sweet_trip_mm_sweep_y.wav
│ 12927_sweet_trip_mm_sweep_z.wav
│ audio.kv
│ buildozer.spec
│ main.py
│ pitch.py
│
├─camera
│ main.py
│
├─canvas
│ bezier.py
│ canvas_stress.py
│ circle.py
│ fbo_canvas.py
│ kiwi.jpg
│ lines.py
│ lines_extended.py
│ mesh.py
│ mesh_manipulation.py
│ mtexture1.png
│ mtexture2.png
│ multitexture.py
│ repeat_texture.py
│ rotation.py
│ rounded_rectangle.py
│ scale.py
│ stencil_canvas.py
│ tesselate.py
│ texture.py
│ texture_example_image.png
│
├─container
│ │ main.py
│ │
│ └─kv
│ 1.kv
│ 2.kv
│ 3.kv
│ root.kv
│
├─cover
│ cover_image.py
│ cover_video.py
│
├─demo
│ │ camera_puzzle.py
│ │
│ ├─kivycatalog
│ │ │ kivycatalog.kv
│ │ │ main.py
│ │ │
│ │ └─container_kvs
│ │ AnchorLayoutContainer.kv
│ │ BoxLayoutContainer.kv
│ │ ButtonContainer.kv
│ │ CheckBoxContainer.kv
│ │ FileChooserContainer.kv
│ │ FloatLayoutContainer.kv
│ │ GridLayoutContainer.kv
│ │ LabelContainer.kv
│ │ MediaContainer.kv
│ │ PlaygroundContainer.kv
│ │ PopupContainer.kv
│ │ ProgressBarContainer.kv
│ │ RestContainer.kv
│ │ ScatterContainer.kv
│ │ SelectorsContainer.kv
│ │ StackLayoutContainer.kv
│ │ TextContainer.kv
│ │
│ ├─multistroke
│ │ gesturedatabase.kv
│ │ gesturedatabase.py
│ │ helpers.py
│ │ historymanager.kv
│ │ historymanager.py
│ │ main.py
│ │ multistroke.kv
│ │ settings.kv
│ │ settings.py
│ │
│ ├─pictures
│ │ │ android.txt
│ │ │ main.py
│ │ │ pictures.kv
│ │ │ shadow32.png
│ │ │
│ │ └─images
│ │ .empty
│ │ Bubbles.jpg
│ │ faust_github.jpg
│ │ Ill1.jpg
│ │ Wall.jpg
│ │
│ ├─shadereditor
│ │ main.py
│ │ shadereditor.kv
│ │
│ ├─showcase
│ │ │ android.txt
│ │ │ main.py
│ │ │ README.txt
│ │ │ showcase.kv
│ │ │
│ │ └─data
│ │ │ background.png
│ │ │ faust_github.jpg
│ │ │
│ │ ├─icons
│ │ │ next.png
│ │ │ prev.png
│ │ │ README
│ │ │ sourcecode.png
│ │ │
│ │ └─screens
│ │ accordions.kv
│ │ bubbles.kv
│ │ buttons.kv
│ │ carousel.kv
│ │ checkboxes.kv
│ │ codeinput.kv
│ │ dropdown.kv
│ │ filechoosers.kv
│ │ popups.kv
│ │ progressbar.kv
│ │ rstdocument.kv
│ │ scatter.kv
│ │ screenmanager.kv
│ │ sliders.kv
│ │ spinner.kv
│ │ splitter.kv
│ │ switches.kv
│ │ tabbedpanel + layouts.kv
│ │ textinputs.kv
│ │ togglebutton.kv
│ │
│ └─touchtracer
│ android.txt
│ icon.png
│ main.py
│ particle.png
│ README.txt
│ touchtracer.kv
│
├─frameworks
│ └─twisted
│ echo_client_app.py
│ echo_server_app.py
│ twistd_app.py
│
├─gestures
│ gesture_board.py
│ my_gestures.py
│
├─guide
│ ├─designwithkv
│ │ controller.kv
│ │ main.py
│ │
│ ├─firstwidget
│ │ 1_skeleton.py
│ │ 2_print_touch.py
│ │ 3_draw_ellipse.py
│ │ 4_draw_line.py
│ │ 5_random_colors.py
│ │ 6_button.py
│ │
│ └─quickstart
│ main.py
│
├─includes
│ button.kv
│ layout.kv
│ main.py
│ test.kv
│
├─keyboard
│ android.txt
│ main.py
│ numeric.json
│
├─kinect
│ kinectviewer.py
│ README.txt
│
├─kv
│ │ app_button.kv
│ │ app_camera.kv
│ │ app_fbo.kv
│ │ app_layout.kv
│ │ app_logo.kv
│ │ app_scatter.kv
│ │ app_stencil.kv
│ │ app_video.kv
│ │ builder_template.py
│ │ kivy.jpg
│ │ kvrun.py
│ │
│ └─ids
│ ├─id_in_kv
│ │ id_in_kv.py
│ │ test.kv
│ │
│ └─kv_and_py
│ kv_and_py.py
│ test.kv
│
├─miscellaneous
│ clipboard.py
│ joystick.py
│ multiple_dropfile.py
│ shapecollisions.py
│ shapedwindow.py
│ two_panes.py
│
├─RST_Editor
│ editor.kv
│ main.py
│
├─settings
│ android.txt
│ main.py
│
├─shader
│ plasma.kv
│ plasma.py
│ shadertree.kv
│ shadertree.py
│ tex3.jpg
│
├─svg
│ benchmark.py
│ cloud.svg
│ main-smaa.py
│ main.py
│ music.svg
│ ship.svg
│ sun.svg
│ tiger.svg
│
├─tutorials
│ ├─notes
│ │ └─final
│ │ │ buildozer.spec
│ │ │ main.py
│ │ │ note.kv
│ │ │
│ │ └─data
│ │ icon.png
│ │
│ └─pong
│ │ main.py
│ │ pong.kv
│ │
│ └─steps
│ ├─step1
│ │ main.py
│ │ pong.kv
│ │
│ ├─step2
│ │ main.py
│ │ pong.kv
│ │
│ ├─step3
│ │ main.py
│ │ pong.kv
│ │
│ ├─step4
│ │ main.py
│ │ pong.kv
│ │
│ └─step5
│ main.py
│ pong.kv
│
└─widgets
│ accordion_1.py
│ actionbar.py
│ asyncimage.py
│ boxlayout_poshint.py
│ bubble_test.py
│ camera.py
│ carousel_buttons.py
│ cityCC0.jsa
│ cityCC0.mpg
│ cityCC0.png
│ codeinput.py
│ codeinputtest.kv
│ colorpicker.py
│ colorusage.py
│ compound_selection.py
│ customcollide.py
│ effectwidget.py
│ effectwidget2.py
│ effectwidget3_advanced.py
│ fbowidget.py
│ focus_behavior.py
│ image_mipmap.py
│ keyboardlistener.py
│ label_mipmap.py
│ label_sizing.py
│ label_text_size.py
│ label_with_markup.py
│ lang_dynamic_classes.py
│ pagelayout.py
│ popup_with_kv.py
│ rstexample.py
│ scatter.kv
│ scatter.py
│ screenmanager.py
│ scrollview.kv
│ scrollview.py
│ settings.py
│ shorten_text.py
│ spinner.py
│ splitter.py
│ tabbedpanel.py
│ tabbed_panel_showcase.py
│ textalign.kv
│ textalign.py
│ textinput.py
│ unicode_textinput.py
│ videoplayer.py
│
├─lists
│ │ fixtures.py
│ │ fixtures.pyc
│ │ fruit_detail_view.py
│ │ list_cascade.py
│ │ list_cascade_dict.py
│ │ list_cascade_images.py
│ │ list_composite.py
│ │ list_kv.py
│ │ list_master_detail.py
│ │ list_ops.py
│ │ list_reset_data.py
│ │ list_simple.py
│ │ list_simple_in_kv.py
│ │ list_simple_in_kv_2.py
│ │ list_two_up.py
│ │ README.md
│ │
│ └─fruit_images
│
├─recycleview
│ basic_data.py
│
└─sequenced_images
│ android.txt
│ main.kv
│ main.py
│
├─data
│ └─images
│ bird.zip
│ button_white.png
│ button_white_animated.zip
│ cube.zip
│ info.png
│ info.zip
│ simple_cv_joint_animated.gif
│
└─uix
custom_button.py
__init__.py
3Drendering
BlenderのOBJファイルを読み込んで表示しています。
Gallery of Examples(翻訳済み) » 3D Rotating Monkey Head(翻訳済み)
にも説明があります。
ただこのレンダラー、他のobjファイルを読み込むとポリゴンがひっくり返ったりしてうまく表示できない時もありました。
android
comapass
pyjunisでandroindのAPIを動かして表示しています。PC上では動作不可でbultozerを使用してAPKを作成するか、またはKivy Lancherを使用してandroid端末上で実行する必要があります。
takepicture1
こちらもPC上では動きません。起動後「Take a Picutre」ボタンを押すとカメラが起動します。
animation
「plop」ボタンをクリックするとボタンが画面中央に移動しながら大きくなります。
application
app_suite_data
実行時に引数に応じてKvファイルなど各ファイルを読み込んで表示します。
表示一覧は以下の通り。
b - Use build() method to return a widget
d - Use a kv file from a different directory
f - Use a kv file with the widget object
p - Use prebuilt widget inside a layout
s - Use a kivy language string to create the widget
r - pick one of the options at random.
h - show this help message
詳しくはGallery of Examples(翻訳済み) » Suite of Application Builders(翻訳済み)に書いてあります。
audio
main.py
各ボタンをクリックすると音が流れます。
pitch
これは各ボタンがピアノの鍵盤で押すとキーが違う音が流れるみたいですが、
肝心の音を流す「pluck-pcm32.wav」ファイルがないので音が流れません。
camera
公式のGallery of Examples » Camera Example の内容です。
Kivy内部でOpenCVを使用してWebカメラの映像を表示、ボタンを押すと静止画キャプチャーを行います
canvas
bezier
ベイジアンで曲線を描きます。
スライダーで線の長さを調整できます。
詳しくはGallery of Examples(翻訳済み) » Bezier Example(翻訳済み)に書いてあります。
canvas_stress
小さな正方形を表示することでPCのグラフィック性能を図るそうです。
詳しくはGallery of Examples(翻訳済み) » Canvas stress(翻訳済み)に書いてあります。
circle
楕円をスライダーで表示部の操作をします。スライダーを動かすとKivyのロゴの大きさ変わったりします。
詳しくはGallery of Examples(翻訳済み) » Circle Example(翻訳済み)に書いてあります。
fbo_canvas
ボタンを押すと左から右にボタンが移動します。
詳しくはGallery of Examples(翻訳済み) » FBO Canvas(翻訳済み)に書いてあります。
lines
SmoothLine機能のデモだそうです。
詳しくはGallery of Examples(翻訳済み) » Line (SmoothLine) Experiment(翻訳済み)に書いてあります。
lines_extended
円、楕円、長方形を表示します。
詳しくはGallery of Examples(翻訳済み) » Lines Extended Demo(翻訳済み)に書いてあります。
mesh
画像を変形させるメッシュのデモです
詳しくはGallery of Examples(翻訳済み) » Mesh test(翻訳済み)に書いてあります。
mesh_manipulation
画像を変形させるメッシュのデモです。
左のスライダーを動かすとそれに合わせてKivyのlogo画像が変形します。
multitexture
文字Kの画像(mtexture1.png)とオレンジ色の円の画像(mtexture2.pngの画像)の2つのテクスチャをブレンドする例です。
詳しくはGallery of Examples(翻訳済み) » Multitexture Example(翻訳済み)に書いてあります。
repeat_texture
ウィンドウに文字 K(mtexture1.png)を64回繰り返します
詳しくはGallery of Examples(翻訳済み) » Repeat Texture on Resize(翻訳済み)に書いてあります。
rotation
PushMatrixとPopMatrixを使用して、ボタンを回転させます。
詳しくはhttps://pyky.github.io/kivy-doc-ja/examples/gen__canvas__rotation__py.html)に書いてあります。
rounded_rectangle
RoundedRectangleを使用して各丸の四角形を描画します。
scale
Scale
を使用してボタンのサイズを変更しています。
stencil_canvas
stencil viewの使用デモです。
詳しくはGallery of Examples(翻訳済み) » Stencil demo(翻訳済み)に書いてあります。
tesselate
ポリゴンをテセレーション (tesselating)するための実験的なライブラリのデモです。 テセレーション の詳しい説明はwikipediaを見てください。
詳しくはGallery of Examples(翻訳済み) » Tesselate Demonstrationに書いてあります。
texture
テクスチャの使用例です。
詳しくはGallery of Examples(翻訳済み) » Texture Wrapping and Coordinates Example(翻訳済み)に書いてあります。
container
containerという機能を使うとscreen wigetにページを足せるそうです。
この例では複数のkvファイルをロードしてそれぞれ1つずつページにして足しているようです。
cover
CoverBehaviorを使用したデモのようです
cover_image
JPG画像を読み込んで表示しています。
cover_video
mpeg動画を読み込んで再生表示しています。
demo
demo camera puzzle
詳しくはGallery of Examples(翻訳済み) » Shuffled Camera Feed Puzzle(翻訳済み)に書いてあります。
kivycatalog
複数のwidgetを選択表示、その場でKv Languageを書いて結果を確認できます。
詳しくはGallery of Examples(翻訳済み) » Kivy Catalog(翻訳済み)に書いてあります。
multistroke
ジェスチャーを記録して、後でかいたものとあっているか比較できるようです。アンドウ、リドウ、設定画面など細かい機能も充実しています。
Kivyで複雑なアプリを作成しているならコードを一読しても損はないかと思います。
詳しくはGallery of Examples(翻訳済み) » Multistroke Recognition Database Demonstration(翻訳済み)に書いてあります。
pictures
画像ビューアです。
詳しくはGallery of Examples(翻訳済み) » Basic Picture Viewer(翻訳済み)に書いてあります。
androidアプリもあります。Google play
shadereditor
頂点とフラグメントを編集するライブエディタです。
詳しくはGallery of Examples(翻訳済み) » Live Shader Editor(翻訳済み)に書いてあります。
showcase
Kivyのwigetを紹介しています。個人的にはkivyをインストール後、最初に実行してみてKivyにどんなwidgetがあるかを確認するのをお勧めします。
詳しくはGallery of Examples(翻訳済み) » Showcase of Kivy Featuresに書いてあります。
androidアプリもあります。Google play
touchtracer
マルチタッチのデモです。複数のタッチに対応しています。
androidアプリがあるので端末を持っている方はインストールして動作を確かめてみるといいかと思います。
詳しくはGallery of Examples(翻訳済み) » Touch Tracer Line Drawing Demonstration(翻訳済み)に書いてあります。
androidアプリもあります。Google play
frameworks
twistedのデモです。Kivy内部でPython2系でしかサポートしていないらしく実行したところ以下のエラーが出て起動しませんでした。
Traceback (most recent call last):
File ".\twistd_app.py", line 2, in <module>
install_twisted_reactor()
File "C:\Users\xxxxx\ppData\Local\Programs\Python\Python36\lib\site-packages\kivy\support.py", line 172, in install_twisted_reactor
"_threadselect interface of twisted is not available on Python 3."
NotImplementedError: _threadselect interface of twisted is not available on Python 3.
gestures
ジェスチャーを書いて一致しているか比較ができるようです。
guide
インストールして最初に行うファイルの位置づけのようです。
quickstart
Labelにhallo worldが表示されます.
designwithkv
BoxLayoutとButton、Labelで構成されたシンプルなレイアウトの例です。
firstwidget
チュートリアルのペイントアプリです。
内容の詳しい説明はTutorials(翻訳済み) » A Simple Paint App(翻訳済み)にあります。
includes
kv languauge のinclude機能を使って複数のKvファイルから一つのレイアウトを作っています。includeはpyhotnのimportと同じ機能です。
keybord
Kivy内部で文字入力の際に直接入力からバーチャルキーボードに変更できるデモです。キーボードはいくつか種類があります。※日本語キーボードがないので日本語入力はできません。
kinect
kinect持っていないので実行できませんでした。
コード見た限りだとKivnectの通常カメラの映像と深度カメラの映像を表示するようです。
kv
app_button
kvrun.py で起動します。シンプルなボタンのレイアウトとFPSを計算してログ出力されます。
app_camera
kvrun.py で起動します。シンプルなCANVASの描画とFPSを計算してログ出力されます。
app_fbo
kvrun.py で起動します。シンプルなfboの描画とFPSを計算してログ出力されます。
app_layout
kvrun.py で起動します。シンプルなBoxLayoutと複数のボタンの表示とFPSを計算してログ出力されます。
app_logo
kvrun.py で起動します。複数の画像の表示とFPSを計算してログ出力されます。
app_scatter
kvrun.py で起動します。scatterlayoutの表示とFPSを計算してログ出力されます。
app_stencil
kvrun.py で起動します。stencilLayoutの表示とFPSを計算してログ出力されます。
app_video
kvrun.py で起動します。stencilLayoutの表示とFPSを計算してログ出力されます。
builder_template
Kv languageのbuilderを使って表示する例です。
id_in_kv
idを使用してKvファイルから、Python側の関数にアクセスする例です。
kv_and_py
kvファイルと、Pythonファイルの例です。
miscellaneous
clipboard
クリックボードの例です。コピー&ペーストができます。
joystick
ジョイスティックを使った操作の例です。ジョイスティックを接続してボタン入力すると、ボタンごとにログ出力されます
multiple_dropfile
ファイルドラッグの例です。ファイルを左右のボタンにドラッグすると、ファイルのフルパスがボタンに表示されます。
shapecollisions
コリュジョン(衝突判定)の例です。図形をドラッグして近づけると衝突判定の結果がログ出力されます。
shapedwindow
エラーになって起動しないです。
どうもKivyのconfigでない項目を設定しようとしてエラーになっているみたいです。次期バージョンの例(?)かもしれないです。
File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python36\lib\configparser.py", line 792, in get
raise NoOptionError(option, section)
configparser.NoOptionError: No option 'window_shape' in section: 'kivy'
two_panes
左のボタンをクリックすると、ボタンの表示文字が右のラベルに表示されます。
RST_Editor
RSTのエディターができます。
settings
F1を押すと設定できるsettingの使用例です。
settingも色々表示形式が選べるようですがあるようです。
shader
1.10.1対応のシェーダの表示機能のデモで動きませんでした。
Exception: The version of Kivy installed on this system is too old. (You have 1.10.0, but the application requires 1.10.1)
svg
1.10からサポートされたSVG画像を読み込んで表示するデモです。
tutorials
note
チュートリアルフォルダに入っていますが公式では説明されていません。
一般的なメモ帳アプリです。クリックして追加、既存項目の編集ができます。
書いた項目はjson形式で自動保存されます。
かなり良い出来なので、公式でちゃんとチュートリアルで紹介されて入ればよかったのに・・・。
pong game
公式のチュートリアルで紹介されているPonゲームです。
詳しい説明はTutorials(翻訳済み) » Pong Game Tutorial(翻訳済み)を見てください。
widgets
widgetの使い方です
accordion
actionbar
asyncimage
boxlayout_poshint
bubble_test
carousel_buttons
codeinput
colorpicker
colorusage
compound_selection
customcollide
effectwidget
focus_behavior
image_mipmap
keyboardlistener
label_mipmap
label_sizing
label_text_size
label_with_markup
lang_dynamic_classes
pagelayout
popup_with_kv
rstexample
scatter
screenmanager
settings
shorten_text
spinner
splitter
tabbed_panel_showcase
tabbedpanel
textalign
textinput
unicode_textinput
videoplayer
lists
Llistviewの使用例です。シンプルなものから2段組表示、ボタンに画像をひょうじなど色々な例が載っています。
なお誤解されている方もいますがLlistviewは将来的に廃止の方向となっていますがKivy1.10ではLlistviewは動きます。
list_cascade
list_cascade_dict
list_cascade_images
list_composite
list_kv
list_master_detail
list_ops
list_reset_data
list_simple
list_simple_in_kv
list_two_up
recycleview
Kivy1.10からLlistviewに代わって新規追加されたrecycleviewの使用例です。
項目をボタンから追加したり削除したりできます。
recycleviewの使用例はこの1例しかないですが、これから増えるのではないかと予想しています。
sequenced_images
画像ファイルの例みたいです。アニメーションgifを再生とかできます。