Kivy

Kivyアプリ実行時に引数を与えるだけで使えるようになる便利なツール群

kivy.modules

このパッケージ内には、プログラム実行時に組み込むことができる便利な機能たちがあります。ここではその中で良さ気な物を幾つか選んで紹介したいと思います。全ての機能を知りたいのなら公式をご覧ください。

Inspector

使いたい時はpython ./main.py -m inspectorのようにコマンドに-m inspectorを付けるかソースコードに

from kivy.config import Config
Config.set('modules', 'inspector', '')

と書きます。

アプリが立ち上がってから Ctrl + E を押すと

07_inspector_00.png

が出てくるので 画面上にあるWidgetをどれでもいいのでClick。

07_inspector_01.png

それから下にある <kivy.uix.button.Button...> と書かれたButtonを押すと

07_inspector_02.png

Widget階層やPropertyの値を確認できます。

Keybinding

使いたい時はInspectorと同じ要領で、手順中のinspectorkeybindingに代えてください。

このmoduleは幾つかの機能をKeyboardに割り当てます。

  • F11 ... Windowを回転
  • Shift + F11 ... landscape,portraitの切り替え
  • F12 ... Screenshot撮影(OSの持つScreenshotとは違ってWindowの枠は含まれない)

TouchRing

画面を触っている間(MouseのButtonを押し下げている間)その位置に白い輪っかを表示してくれます。

07_touchring_00.png

このmoduleは上の2つとは違い、任意で追加の引数を与える事ができます。例えば白い輪の代わりに好きな画像を使いたい時は

コマンドならpython ./main.py -m touchring:image=好きな画像.png、ソースコードからなら

from kivy.config import Config
Config.set('modules', 'touchring', 'image=好きな画像.png')

とします。

07_touchring_01.png

さらに透明度と拡大率を指定

python ./main.py -m touchring:image=好きな画像.png,alpha=0.5,scale=2

from kivy.config import Config
Config.set('modules', 'touchring', 'image=好きな画像.png,alpha=0.5,scale=2')

07_touchring_02.png

ShowBorder

使い方は他の物と同様です。これを使う事で例えば以下の実行結果は

from kivy.lang import Builder
from kivy.app import runTouchApp


runTouchApp(Builder.load_string('''
GridLayout:
    padding: 10
    spacing: 10
    cols: 3
    Widget:
    Label:
        text: 'Label'
    Button:
        text: 'Button'
    RelativeLayout:
'''))

07_showborder_00.png

以下のようになります。

07_showborder_01.png

このように元々境界線の無かったWidgetにそれができる為、Widgetの配置が正しく行われているか確かめるのに非常に便利です。ただこのmoduleはKivy1.10.1には入っていないので、使いたいならmaster branchをinstallするか以下のどれかの手順を踏んでください。

A: <ユーザーのホームディレクトリ>/.kivy/mods/の中にshowborder.pyを入れる

<ユーザーのホームディレクトリ>/.kivy/mods/はKivyがmoduleを探しに行くディレクトリの一つでなので、ここにshowborder.pyを入れてやるだけで使えるようになります。この方法は手軽である反面、仮想環境による分離がなされず、そのユーザーが実行するKivyプログラム全てに影響を与えるという短所があります。

B: projectに含めてしまう

project内にmodule検索対象のディレクトリを作り、そこにshowborder.pyを入れます。そしてその場所を以下のようにしてKivy側に教えてあげます。

from kivy.modules import Modules
Modules.add_path('<module検索対象のディレクトリ>')

これだと他のprojectに一切影響を与えませんが、projectのディレクトリ構成が理解しづらくなるかもしれません。

C: 自分で書く

from kivy.lang import Builder

Builder.load_string('''
<Widget>:
    canvas.after:
        Color:
            rgba: 1, 1, 1, 1
        Line:
            rectangle: self.x + 1, self.y + 1, self.width - 1, self.height - 1
            dash_offset: 5
            dash_length: 3
''')

showborderのやってる事を自分でやります。kivy.modulesの枠組みを使ってないので、Config.set('modules', 'showborder', '')と書く必要はありません。