embedded.95
embedded.95

Reputation: 63

Python Kivy - Changing Screens from another Python file

I'm working on a simple Kivy/Python App that has a few screens. I have split each screen up into it's own python file, for example:

'main.py', 'homeScreen.py', 'settingsScreen.py'

In 'main.py' I have this:

if __name__ == '__main__':
    app = myApp()
    app.run()

Which manages/runs the app with a screen manager... for example:

class myApp(App):
    def build(self):
        self.screen_manager = ScreenManager()

        # Home Screen
        self.home_screen = homeScreen.HomeScreen()
        screen = Screen(name="Home")
        screen.add_widget(self.home_screen)
        self.screen_manager.add_widget(screen)

        # Settings Screen
        self.settings_screen = settingsScreen.settingsScreen()
        screen = Screen(name="Settings")
        screen.add_widget(self.settings_screen)
        self.screen_manager.add_widget(screen)

        return self.screen_manager

The problem is that I can't seem to change screens from another .py file

homeScreen.py:

class HomeScreen(FloatLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        # button UI code

    def settingsButton(self, instance):
        app.screen_manager.current = "Settings"

Because 'app' is defined in 'main.py' I can't seem to access it to change to the settings screen. I've tried the following but I still can't seem to change 'app.screen_manager.current' from a file other than main:

import main
from main import *

main.app.screen_manager.current = "Settings"
app.screen_manager.current = "Settings"

Any suggestions would be much appreciated. Thank you.

Upvotes: 0

Views: 400

Answers (1)

John Anderson
John Anderson

Reputation: 38947

You can change screens by accessing the ScreenManager, and that can be accomplished from anywhere by using App.get_running_app():

App.get_running_app().screen_manager.current = 'Settings'

or:

App.get_running_app().root.current = 'Settings'

Upvotes: 2

Related Questions