no-image

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

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