Kivyの庭を歩く

# はじめに

[Kivy Garden](https://github.com/kivy-garden)にあるモジュール一覧はぱっと見てもどんな機能があるかわかりにくいので、自分なりに分かりやすい一覧を作ってみました。各モジュールの説明はDocumentaionやScreenshotを見て大体こうだろうという予測で書いている物もあるので気をつけてください。

# モジュール一覧

## 未分類

### [joystick](https://github.com/kivy-garden/garden.joystick)

Androidに移植されたPlayStationのGameでみられる、画面上のスティック

### [roulette](https://github.com/kivy-garden/garden.roulette)

スロットマシンのリールを回すように値を選ぶWidget

![roulette_image](https://github.com/kivy-garden/garden.roulette/blob/master/screenshot.png?raw=true)

### [datetimepicker](https://github.com/kivy-garden/garden.datetimepicker)

上のrouletteを使って作った日時を選ぶWidget
![](https://github.com/kivy-garden/garden.datetimepicker/blob/master/screenshot.png?raw=true)

### [moretransitions](https://github.com/kivy-garden/garden.moretransitions)

ScreenManager用のScreen切り替えアニメーション

![moretransitions_image](https://github.com/kivy-garden/garden.moretransitions/blob/master/screenshot.png?raw=true)

### [gauge](https://github.com/kivy-garden/garden.gauge)

車の速度計のようなWidget
![gauge_scrshot](https://github.com/kivy-garden/garden.gauge/blob/master/screenshot.png?raw=true)

### [spine](https://github.com/kivy-garden/garden.spine)

[Spine](http://ja.esotericsoftware.com/)という2Dアニメーション制作ツールで作ったデータを扱うWidget
![spine_scrshot2](https://raw.githubusercontent.com/kivy-garden/garden.spine/master/screenshot2.png)

### [navigationdrawer](https://github.com/kivy-garden/garden.navigationdrawer)

Androidでみられる、画面端をスライドして出てくるやつ
![navigationdrawer_scrshot](https://github.com/kivy-garden/garden.navigationdrawer/blob/master/navigationdrawer_open_example2.png?raw=true)

### [filebrowser](https://github.com/kivy-garden/garden.filebrowser)

kivy標準のFileChooserの強化版
![](https://github.com/kivy-garden/garden.filebrowser/blob/master/filebrowser.png?raw=true)

### [xcamera](https://github.com/kivy-garden/garden.xcamera)

kivy標準のcameraの強化版

### [iconfonts](https://github.com/kivy-garden/garden.iconfonts)

icon fontをLabelとその派生クラスで扱えるようにする為の物

### [qrcode](https://github.com/kivy-garden/garden.qrcode)

QRコードを作って表示してくれるWidget。
![](https://github.com/kivy-garden/garden.qrcode/blob/master/screenshot.png?raw=true)

### [progressspinner](https://github.com/kivy-garden/garden.progressspinner)

![](https://github.com/kivy-garden/garden.progressspinner/raw/master/progspin.gif)

### [pagecurl](https://github.com/kivy-garden/garden.pagecurl)

紙をめくるようなアニメーション。かなり凄い。
![](https://github.com/kivy-garden/garden.pagecurl/blob/master/screenshot.png?raw=true)
ScreenManager用のTransitionクラスも用意してくれている。

### [magnet](https://github.com/kivy-garden/garden.magnet)

WidgetのPropertyの変化を自動でアニメーション化してくれる。勉強になるコードだった。
Python3で使うには\_\_init\_\_.pyを修正してあげないといけない。

```python3:修正の例
try:
    from .magnet import Magnet
except ImportError:
    from magnet import Magnet
```

### [inkcanvas](https://github.com/kivy-garden/garden.inkcanvas)

![](https://github.com/kivy-garden/garden.inkcanvas/blob/master/screenshot.png?raw=true)

### [geartick](https://github.com/kivy-garden/garden.geartick)

kivy.uix.sliderの円形版で歯車の画像付き。歯車を回すことで値の調節を行うのだと思う。
確かめたいがgeartick.pyを\_\_main\_\_として実行した時のテストコードが上手くいかない。

### [ddd](https://github.com/kivy-garden/garden.ddd)

3Dデータを表示できる様。.obj+mtl形式に対応
![](https://github.com/kivy-garden/garden.ddd/blob/master/screenshot.png?raw=true)

### [collider](https://github.com/kivy-garden/garden.collider)

点と多角形の衝突判定 及び 点と楕円の衝突判定を行う。テストコードではkivyを使っているものの、モジュール本体はkivyには全く依存していない。何故kivy-gardenに置かれているのか謎。またcythonによって高速化されるもよう。

### [bar](https://github.com/kivy-garden/garden.bar)

たいした事なさそう。数値を長方形の長さで表現する。

### [animlabel_bezier](https://github.com/kivy-garden/garden.animlabel_bezier)

動画で見たことある。曲線に沿って文字が流れていく。
![](https://github.com/kivy-garden/garden.animlabel_bezier/blob/master/screenshot.png?raw=true)

### [animlabel](https://github.com/kivy-garden/garden.animlabel)

Labelの文字が格好良くアニメーションする。([動画](http://www.youtube.com/watch?v=PUD_RTmpxag))

### [anchoredscrollview](https://github.com/kivy-garden/garden.anchoredscrollview)

[動画](https://youtu.be/SKp2m9j29ug)を見るかぎり、いわゆるstickyなheader/footerというやつの実現に使えるって事だと思う。

### [androidtabs](https://github.com/kivy-garden/garden.androidtabs)

名前のまんまAndroid風のタブコントロール

### [notification](https://github.com/kivy-garden/garden.notification)

kivyはWindowを一つしか作れないはずなのにどうやってこれを実現してるのかと思ったら、なんと新たにプロセスを作ってた。またPython3では動かなかった。
![](https://raw.githubusercontent.com/kivy-garden/garden.notification/master/screenshot.png)

### [swipetodelete](https://github.com/kivy-garden/garden.swipetodelete)

Androidで起動中のアプリの一覧を表示させた時、スワイプする事で各アプリを終了させられますが、そんな感じのUIの作成に使えるのかも。
![](https://camo.githubusercontent.com/d9f6e7ed8a12913ef5e7879d1c83d40b247563fb/68747470733a2f2f7261772e6769746875622e636f6d2f6b696f6b34362f7377697065746f64656c6574652f6d61737465722f73637265656e73686f742e706e67)

### [rotabox](https://github.com/kivy-garden/garden.rotabox)

色々機能てんこ盛り。Widgetの回転、回転させたWidgetの衝突判定、独自の衝突判定領域を作る為のGUIエディタなど。

### [xpopup](https://github.com/kivy-garden/garden.xpopup)

YesNoボタン付きPopup、何かにLoginする時によく出てくる認証用のPopup、File選択用のPopup などの利用頻度の高そうなWidget集。下のは認証用のPopupの画像。

![](https://github.com/kivy-garden/garden.xpopup/blob/master/screenshot.png?raw=true)

以下のコマンドで実際に触ってみると分かりやすい。

```
$ python -m kivy.garden.xpopup.demo_app
```

### [mapview](https://github.com/kivy-garden/garden.mapview)

GoogleMapのような事をやろうとしているみたい。これに関するQiitaの記事があるので貼っておきます。
記事:[Kivyのmapviewを試してみた](https://qiita.com/Ds110/items/95d9fcacb5c73ae63fef)
![](https://cloud.githubusercontent.com/assets/37904/22764225/92516f12-ee69-11e6-99d5-6346e302766d.png)

### [resizable_behavior](https://github.com/kivy-garden/garden.resizable_behavior)

Widgetの端をDragする事で大きさを変えられる様にする

### [facelock](https://github.com/kivy-garden/garden.facelock)

顔認証

### [desktopvideoplayer](https://github.com/kivy-garden/garden.desktopvideoplayer)

モジュールというよりは完成されたメディアプレーヤー。Kivy自体が既に[似たようなWidget](https://kivy.org/docs/api-kivy.uix.videoplayer.html)をもっているが、それとどう違うのだろうか。
![](https://raw.githubusercontent.com/kivy-garden/garden.desktopvideoplayer/master/doc/simple_player.png)

### [docbrowser](https://github.com/kivy-garden/garden.docbrowser)

docstringを見る為の物のようですが、わざわざKivyで見る意味があるのでしょうか？

### [segment](https://github.com/kivy-garden/garden.segment)

六角形を組み合わせて数字とアルファベットを描画してくれる。
![](https://github.com/kivy-garden/garden.segment/blob/master/screenshot.png?raw=true)

### [knob](https://github.com/kivy-garden/garden.knob)

![](https://github.com/kivy-garden/garden.knob/blob/master/screenshot.png?raw=true)

### [router](https://github.com/kivy-garden/garden.router)

FlaskのようなAPIでScreenManagerのScreenの切り替えを行う

### [hotkeybehavior](https://github.com/kivy-garden/garden.hotkeybehavior)

Windowが非アクティブ状態でKeyboard Focusを失っている状態でもKey入力が受け取れるのかな。OSのAPIを叩いてるらしく、現状Windowsでしか使えない模様。

### [multichoicetogglebutton](https://github.com/kivy-garden/garden.multichoicetogglebutton)

名前のまんま。複数選択が可能なToggleボタン。

### [circulardatetimepicker](https://github.com/kivy-garden/garden.circulardatetimepicker)

日時を選ぶWidget。現状は時間しか選べない。

### [filechooserthumbview](https://github.com/kivy-garden/garden.filechooserthumbview)

FileChooserIconViewに似ているが、可能であればIconの代わりに縮小画像を表示する。
![](https://github.com/kivy-garden/garden.filechooserthumbview/blob/master/screenshot.png?raw=true)

### [smaa](https://github.com/kivy-garden/garden.smaa)

子Widgetにアンチエイリアスをかけてくれる。OpenGL4.3又か4.4のdriverが要る。
Kivyには[EffectWidget](https://kivy.org/docs/api-kivy.uix.effectwidget.html)があるから要らない子だと思う。

### [cefpython](https://github.com/kivy-garden/garden.cefpython)

アプリケーションに埋め込む形のWebBrowser。64bitのLinuxとWindowsそしてPython2.7のみの対応。ずっと更新されてない。

### [particlesystem](https://github.com/kivy-garden/garden.particlesystem)

爆発、煙、炎、雪のような物の表現を助けてくれる。[これ](https://www.youtube.com/watch?v=W6vGX3Hb0bk)は別のモジュールの動画ですが、おそらくこのような格好いいアニメーションが作れるのだと思います。

### [texturestack](https://github.com/kivy-garden/garden.texturestack)

複数の画像を組み合わせて一つの絵を作る物のようです。含まれているsampleコードでは
地形の画像![marsh_davies_island_bg-0.png](https://qiita-image-store.s3.amazonaws.com/0/144673/70d6d112-66c5-efd4-5aa2-bb650dba5896.png)
と地形の上に載せる画像![marsh_davies_island_fg-0.png](https://qiita-image-store.s3.amazonaws.com/0/144673/7529fe3d-3e5a-3973-79c0-4404652c2e12.png)
から以下の物を作り出しています
![scr.png](https://qiita-image-store.s3.amazonaws.com/0/144673/f1af36f7-eeb8-de62-5c3c-9ac46587269e.png)

### [animationbuilder](https://github.com/kivy-garden/garden.animationbuilder)

YAML形式でAnimationを書ける。例えば以下のコードは

```python3
from kivy.animation import Animation as A

def create_complex_anim():
    anim1 = A(opacity=0, d=0.3, t='in_out_quad') + A(opacity=1, d=0.3, t='in_out_quad')
    anim1.repeat = True
    anim2 = A(right=800) + A(top=600) + A(x=0) + A(y=0) + A(d=1)
    anim2.repeat = True
    return anim1 & anim2
```

以下のように書ける

```python3
from kivy.garden.animationbuilder import AnimationBuilder

anims = AnimationBuilder.load_string('''
complex_animation:
  P:
    - S:
        - opacity: 0
          d: 0.3
          t: in_out_quad
        - opacity: 1
          d: 0.3
          t: in_out_quad
      repeat: True
    - S:
        - right: 800
        - top: 600
        - x: 0
        - y: 0
        - d: 1
      repeat: True
''')

def create_complex_anim():
    return anims['complex_animation']
```

### [contactform](https://github.com/kivy-garden/garden.contactform)

E-mailを送ってくれる

![](https://raw.githubusercontent.com/myasiny/contactform/master/screenshot.png)

## Graph系

### [graph](https://github.com/kivy-garden/garden.graph)

[garden.matplotlib](https://github.com/kivy-garden/garden.matplotlib)よりも星が多い。
![](https://github.com/kivy-garden/garden.graph/raw/master/screenshot.png)

### [matplotlib](https://github.com/kivy-garden/garden.matplotlib)

有名なグラフ描画ライブラリであるmatplotlibのKivyによる実装。

### [touchgraph](https://github.com/kivy-garden/garden.touchgraph)

折れ線グラフ

### [pizza](https://github.com/kivy-garden/garden.pizza)

![](https://github.com/kivy-garden/garden.pizza/blob/master/screenshot.png?raw=true)

## Menu系

### [modernmenu](https://github.com/kivy-garden/garden.modernmenu)

![](https://github.com/kivy-garden/garden.modernmenu/blob/master/screenshot.png?raw=true)

### [contextmenu](https://github.com/kivy-garden/garden.contextmenu)

![](https://raw.githubusercontent.com/kivy-garden/garden.contextmenu/master/doc/context-menu-01.png)

## 目盛系

### [tickmarker](https://github.com/kivy-garden/garden.tickmarker)

Widgetに目盛を入れる。Sliderに使うと以下のようになる。
![](https://github.com/kivy-garden/garden.tickmarker/blob/master/screenshot.png?raw=true)

### [tickline](https://github.com/kivy-garden/garden.tickline)

同じく目盛を描画してくれる。

### [timeline](https://github.com/kivy-garden/garden.timeline)

上のticklineを使って作ったtimelineを表示するWidget
![](https://github.com/kivy-garden/garden.timeline/blob/master/complex_example.png?raw=true)

## Layout系

### [simpletablelayout](https://github.com/kivy-garden/garden.simpletablelayout)

HTMLにあるようなcolspan、rowspanの概念を理解するGridLayout。(GridLayoutを継承しているわけではない)

### [circularlayout](https://github.com/kivy-garden/garden.circularlayout)

円形に子Widgetを並べてくれる

## よく分からなかったもの

### [roulettescroll](https://github.com/kivy-garden/garden.roulettescroll)

kivy.effects.ScrollEffectに関する物

### [stiffscroll](https://github.com/kivy-garden/garden.stiffscroll)

kivy.effects.ScrollEffectに関する物

### [garden_nspace](https://github.com/kivy-garden/garden_nspace)

「pythonのnamespaceをgardenで使う」みたいな事が書かれている