Capedantic
Capedantic

Reputation: 13

How do I access screen manager from a different class? (Kivy)

I'm sure this will be another easy one, but I'm not sure how to access my screen manager from within the different screens in python code. I can get it to switch with root.manager.current = 'screen' in the kv file, but this obviously doesn't work in python.

my.kv:

...
<Screen3>
    GridLayout:
        Button:
            text:"submit"
            on_press: root.submit()

main.py

from kivy import yadayada

kv_str = """
<Screen1>
    canvas:
        Rectangle:
            pos: self.pos
            size: self.size
<Screen2>
    canvas:
        Rectangle:
            pos: self.pos
            size: self.size
<Screen3>
    canvas:
        Rectangle:
            pos: self.pos
            size: self.size
"""

Builder.load_string(kv_str)

class Screen1(Screen):
  pass

class Screen2(Screen):
  pass

class Screen3(Screen):
    def submit(self):
    #trying to switch screens here

class MyApp(App):

    def build(self):
        sm = ScreenManager()
        sm.add_widget(Screen1(name='screen1'))
        sm.add_widget(Screen2(name='screen2'))
        sm.add_widget(Screen3(name='screen3'))
        return sm

if __name__ == '__main__':
      MyApp().run()

Upvotes: 1

Views: 504

Answers (1)

John Anderson
John Anderson

Reputation: 39002

In your submit() method you can use:

self.manager.current = `screen1`

Upvotes: 1

Related Questions