ファイル選択ダイアログ - Kivy Advent Calendar 2013

去年 @ytakeuch さんがブログ「人は歴史を創り出し、人は歴史を語り継ぐ」で「Kivy Advent Calendar」を書いておられました。今年は、それを引き継いで私も書いてみようかなと思います。

タイトルは「Kivy Advent Calendar 2013」とします。

メインターゲットはAndroid向けビルド済みPython実行環境「Kivy Launcher」です。

「別プラットフォームのKivy」「kivy/python-for-androidのビルド」「Scripting Layer for Android (SL4A) + Python for Android (Py4A)」「Pygame Subset for Android (PGS4A)」などの話もするかもしれません。

でも動作確認はAndroid (Nexus7-2013)でしかやっていないので... そこんとこよろしくお願いします。

 

さて、いつの間にか「Kivy」がWikipedia日本版に載っていました。英語版の翻訳だと思いますが、

- http://ja.wikipedia.org/wiki/Kivy
- http://en.wikipedia.org/wiki/Kivy

英語版と比べると、「2012年にPython 3.3移行のためにPSFから$5000もらった」とか書いてないとか、「PyMTにあるプロジェクトのうち革新的なもの」というよりは「PyMTの発展形である」の方がいいのではとか、いろいろ気になりますが...
ただ、せっかくファイル選択ウィジェットのサンプルコード書いているのに (ただウィジェットの書き方を示しただけで) 書き直さないと実行できない、てのが一番困るかもしれないです。

とりあえず動くように書き換えるとこんな感じになります。

(loaddialog.kv)

#:kivy 1.4.0
:
    BoxLayout:
        size: root.size
        pos: root.pos
        orientation: "vertical"
        FileChooserListView:
            id: filechooser
 
        BoxLayout:
            size_hint_y: None
            height: 30
            Button:
                text: "Cancel"
                on_release: root.cancel()
 
            Button:
                text: "Load"
                on_release: root.load(filechooser.path, filechooser.selection)

(main.py)

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout

class LoadDialog(FloatLayout):
    def load(self, filename): pass
    def cancel(self): pass

class LoadDialogApp(App):
    def build(self): return LoadDialog()

if __name__ == '__main__':
    LoadDialogApp().run()

(android.txt)

title=loaddialog
author=kivy
orientation=portrait

WindowsMacOSXなどはandroid.txtは必要なくて、コンソールから「python main.py」を直接実行すればOK。

Android (KivyLauncher) は /sdcard/kivy/loaddialog/ にフォルダ作って3つのファイルを入れておけば実行できるようになります。

(まあこれは、単にファイルを選択するだけで、開いたり見れたりは出来ませんが...)


追記

とりあえず25日コースで始めてしまいましたが、ネタ続くかな?