複数の画面管理

2016/01/10

Python2.7.10, Kivy1.9.1

複数の画面を読み込んで、切り替えなどを管理するには ScreenManager を使う。

切り替えの方法は2つあって

sm = ScreenManager()
sm.add_widget(Screen(name='first'))
sm.add_widget(Screen(name='second'))

sm.current = 'second'

あらかじめ、追加しておいて切り替える方法と

sm = ScreenManager()
sm.switch_to(Screen())
# later
sm.switch_to(Screen(), direction='left')
# later
sm.switch_to(Screen(), direction='right', duration=1.)

順次、切り替える方法。この場合、一つ前のScreenは切り替わった後にScreenManagerからは削除される。

てっきりメモリに格納しておきたいか、解放したいかで使い分けるのかと思っていたけど、「どちらか一方を使って、両方は使わないこと」とある。
ややこしいのぅ。

下のリンク先のサンプルそのまま

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("""
<MenuScreen>:
    BoxLayout:
        Button:
            text: 'Goto settings'
            on_press: root.manager.current = 'settings'
        Button:
            text: 'Quit'

<SettingsScreen>:
    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()


Screen Manager
http://kivy.org/docs/api-kivy.uix.screenmanager.html