Reputation: 63
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
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