前回までの投稿でお分かりかと思いますが,純粋なpythonの指示だけでkivyのクラスを使いこなすことになると,アプリを作成した際に大きいシステムになるととてもpythonプログラムになってしまいます.これの問題を解消してくれるのが kv ファイルです.どんな仕組みかを大雑把に説明すると,pythonのプログラムファイルのほかにkvファイルというものを(シンプルに)書き,そのkvファイルをpythonから読みむという形になります.
もちろんPythonのプログラムの中でkivyのクラスを使いこなしてプログラムしてもよいのですが,どういうやり方でやるかは状況,環境,個人の哲学などにに強く依存するので,kivyを学ぶ際に知っておいて損はないと思います.実際に書いてみると,同じプログラムでもわかりやすく書けます.
ということで,今回は kvファイルを用いて,Hello, World! を表示させるプログラムを作ってみます.Hellow World! が不安な方は筆者の書いた「Kivy 超入門(1):インストールからHello, World! まで」をまずは見てください(ステマといいたいが,「ステマと言いたいが」と書いたことでもはやステマではない.めでたしめでたし).
内容としてはこちらの動画の内容を日本語で解説しています.
kvファイルを用いた”Hello, World!”
フォルダ(ディレクトリ)を用意する
Pythonファイルとkvファイルの二つのファイルを同じフォルダ(ディレクトリ)に入れておく必要があるので,新しくフォルダを用意しましょう.そして,その中にpythonファイルとkvファイルを作ります(まだ中身は空).筆者は一つ新しいディレクトリを作成し,test.py と kvfile.kv という二つのファイルを用意しました.
kvファイルの編集
まずは,次のようなkvファイル(筆者の場合kvfile.kv)を書いてみましょう.
# File name: test.py <Label> text: "Hello World!"
最初の1行でkvファイルがどのpythonファイルで使われるものかを指定します.先ほどの動画では「どうやってpythonがkivyを呼び出ししてるのかよくわからないが,とりあえずできるんだ」のようなことを言っていますので,教えてもらう立場の私は「そうか,わかった」とうなずいてしまいました.
3行目からは,test.py でLabelが使われる際,どのようなLabelを使うかを設定しています.「Kivy 超入門(1):インストールからHello, World! まで」のものとくらべると,Labelのオプションを「(インデント)性質:その内容」のように指定していますね.
Pythonファイルの編集
次に,pythonファイル(筆者の場合test.py)の中身を次のように書いてみましょう.
from kivy.app import App from kivy.uix.label import Label class kvfile(App): def build(self): return Label() if __name__ == "__main__": kvfile().run()
そしてこれを実行させると以前実行したものと全く同じ画面の”Hello, World!”ができます.少し違うのは左上のウィンドウの名前がkvfileに変わっていることですね.
「Kivy 超入門(1):インストールからHello, World! まで」で扱ったものが何が違うかというと,まず,今までなんでもよかったクラス名が「kvfile」という名前ではないといけません.この「kvfile」という名前は先ほど同じディレクトリに作成したkvファイルの名前ですが,このように書くことで,python側で「同じディレクトリにある kvfile.kv」を参照してくれることになります.
もう一つの違いは,Label のかっこの中身(引数)が空っぽになっていることです.先ほどkvファイルに「text: “Hello World!”」ということを書いたので,pythonファイルの方にLabelの特性を書かなくても済んでいます.
今まではpythonファイルに様々な属性を付与していましたが,kvファイルを使うことでpythonファイルをすっきり書くことができました.HTMLがわかる方には「HTML:CSS」の構造が「pyファイル:kvファイル」になっていると理解していただきたいです.
kvファイルの文字列
今度はkvファイルを次のように変更してみます.
# File name: test.py <Label> text: "Hello "+"World!"
実行結果は先ほどと全く変わりません.このように,pythonで文字列を並べて書く際に「+」を用いましたが,kvファイルでも文字列はこのようにpython同様に扱えることがわかります.
おわり
今回はいつもと比べて短いですが,次の「ボタン」の内容まで書いてしまうとあまりにも量が膨らむので,ここでカットしたいと思います.
間違いなどの指摘がありましたら是非コメントなどに残していただきたいです.長々とした駄文でしたが,読んでいただきありがとうございます.