【初心者向け】Kivyで画面遷移を実装!|Pythonでデスクトップアプリ開発

2019-07-11

Kivyのドキュメントを読み解いて実装力を上げます。
今回はKivyの画面遷移の実装について勉強したので、まとめておきます。

もくじ

  1. 今回学んだコード
  2. ScreenManagerを使う
  3. Kivyの画面設定をPythonファイル内で行う
  4. まとめ
  5. 参考

今回学んだコード

まずはコード全文を載せておきます。
ソースは公式ドキュメントです。

Configuration object

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
# Create both screens. Please note the root.manager.current: this is how
# you can control the ScreenManager from kv. Each screen has by default a
# property manager that gives you the instance of the ScreenManager used.
Builder.load_string("""
:
    BoxLayout:
    Button:
    text: 'Goto settings'
    on_press: root.manager.current = 'settings'
    Button:
    text: 'Quit'
:
    BoxLayout:
    Button:
    text: 'My settings button'
    Button:
    text: 'Back to menu'
    on_press: root.manager.current = 'menu'
""")
# Declare both screens
class MenuScreen(Screen):
    pass
class SettingsScreen(Screen):
    pass
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))
class TestApp(App):
def build(self):
    return sm
if __name__ == '__main__':
TestApp().run()

これをKivyでそのまま動かすと、先程の動画の画面を実装できます。

今回は、このコードをポイントに絞って解説していきます。

ScreenManagerを使う

KivyのScreenManagerは、画面遷移の際に必要なモジュールです。
下の一文で導入可能です。

    from kivy.uix.screenmanager import ScreenManager, Screen

ScreenManagerについてはこちらのドキュメントを参照。

Screen Manager

通常、Kivyの画面実装は、.kvファイルに記述されます。
しかし、今回は簡易的なプログラムだからか、Pythonファイルに記述されてますね。

そのために必要なモジュールもimportされてます。

    from kivy.lang import Builder

画面実装部分はこちらのコード。

    Builder.load_string("""
    :
        BoxLayout:
        Button:
        text: 'Goto settings'
        on_press: root.manager.current = 'settings'
        Button:
        text: 'Quit'
    
    :
        BoxLayout:
        Button:
        text: 'My settings button'
        Button:
        text: 'Back to menu'
        on_press: root.manager.current = 'menu'
    """)

.kvファイル内で、画面遷移に関する記述がされてますね。
on_pressは、Buttonで使われるイベントで、クリックされたときの処理を記述しています。

root.manager.currentは、表示させる画面を指定しています。

この部分でオブジェクトを作成した際に設定したWigetのnameで指定してますね。

    # Create the screen manager
    sm = ScreenManager()
    sm.add_widget(MenuScreen(name='menu'))
    sm.add_widget(SettingsScreen(name='settings'))

Kivyの画面遷移は表示画面を指定する形で実装されてるんですね。

一つ前の画面に戻りたいときなどはどうしたらいいのでしょう?
ページ遷移の流れを一本に統一しないといけないのですかね?

その辺は今後勉強していきます。

まとめ

まだKivyの勉強を初めてたったの2日ですが、すでに色々なものが作れそうでワクワクしてます。
PythonのGUIライブラリの中で最も勢いがあるというのも納得ですね。

何よりドキュメントが充実しているのが本当にありがたいです。
今後も引き続きKivyを勉強して、自作のデスクトップアプリケーションを配布できたらなと思います。

参考

Configuration object

Screen Manager