【问题标题】:Python Kivy - Changing Screens from another Python filePython Kivy - 从另一个 Python 文件更改屏幕
【发布时间】:2021-07-29 08:05:51
【问题描述】:

我正在开发一个有几个屏幕的简单 Kivy/Python 应用程序。我已将每个屏幕拆分为它自己的 python 文件,例如:

'main.py'、'homeScreen.py'、'settingsScreen.py'

在 'main.py' 我有这个:

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

使用屏幕管理器管理/运行应用程序...例如:

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

问题是我似乎无法从另一个 .py 文件更改屏幕

homeScreen.py:

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

        # button UI code

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

因为“app”是在“main.py”中定义的,我似乎无法访问它来更改设置屏幕。我已经尝试了以下方法,但我似乎仍然无法从 main 以外的文件更改“app.screen_manager.current”:

import main
from main import *

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

任何建议将不胜感激。谢谢。

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    您可以通过访问ScreenManager 来更改screens,这可以通过使用App.get_running_app() 在任何地方完成:

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

    或:

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

    【讨论】:

    • 正是我想要的,完美运行!非常感谢您分享您的知识,约翰。
    猜你喜欢
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多