KV言語 (2)
以前の記事で取り上げたスクリーンマネージャのプログラムを,KV言語を用いて書き換えてみます.
◆◆Pythonスタートブック いちばんやさしいパイソンの本 / 辻真吾/著 / 技術評論社 |
from kivy.app import App class screenmanagerkvApp(App): pass screenmanagerkvApp().run()
KV側でルートウィジェットを定義するので,Python側では最低限のこと(Appクラスのサブクラスを定義し,runメソッドを走らせる)しかしていません.サブクラスの名前は
ですので,KVファイルのデフォルト名は
screenmanagerkvApp
となります.
screenmanagerkv.kv
続いてその screenmanagerkv.kv です.
ScreenManager: Screen: name: '0' Button: text: 'Button 0' Screen: name: '1' Button: text: 'Button 1' Screen: name: '2' Button: text: 'Button 2' Screen: name: '3' Button: text: 'Button 3' Screen: name: '4' Button: text: 'Button 4' <Button>: font_size: 36 on_press: self.parent.parent.current = self.parent.parent.next()
ScreenManager オブジェクトがルートウィジェットです.
前回も書いたとおり,この ScreenManager は Screen オブジェクトのみを子に持つことができます.上では5つの Screen オブジェクトを子に持っています.
Screen 自体は RelativeLayout というレイアウトクラスを継承していますので,さらに子を持たせて使うことになります.また Screen オブジェクトの name プロパティに名前となる文字列をわたし,画面切替のときに使えるようにしておきます.
さて5つの Screen はいずれも Button オブジェクトを子に持っていますが,KVスクリプトの一番下に Button クラスに関する記述があります.
<Button>: font_size: 36 on_press: self.parent.parent.current = self.parent.parent.next()
これはクラスルールといって,Buttonクラスの各種プロパティのデフォルト値を定めるものです.クラスルールは < ... > のようにクラス名を不等号ではさんで書きます.このクラスルールに書いてあることは:
このようにメソッドをクラスルールの中に書くこともできますが,メソッドについてはなんでもかんでも書けるわけではありません.このことについては後日詳しく述べたいと思いますが,要はインデントが増えないような「簡単な」もので,on_*** で始まる特殊なメソッドしか書けません.
「科学技術計算」で使うPython 「配列処理」「グラフ作成」から「統計解析」「数式処理」まで |
【送料無料】 実践力を身につけるPythonの教科書 / クジラ飛行机 【本】 |