Kivy屏幕管理

问题描述 投票:0回答:1

如何在程序启动时让主店打开而不是商店

该程序有一个菜单和三个屏幕。我启动时需要打开主屏幕而不是商店

也许还有一个选项可以从菜单中删除图标,以便菜单是文本,反之亦然

主.py

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.core.window import Window
from kivy.utils import get_color_from_hex
from kivy.core.text import LabelBase

Window.size = (430, 930)

class ShopScreen(Screen):
    pass

class ItemsScreen(Screen):
    pass

class HomeScreen(Screen):
    Builder.load_file("Home.kv")

class WindowManager(FloatLayout):
    pass

class MainApp(MDApp):
    def build(self):
        self.theme_cls.theme_style = "Dark"
        sm = ScreenManager()
        sm.add_widget(ShopScreen(name='menu'))
        sm.add_widget(ItemsScreen(name='items'))
        sm.add_widget(HomeScreen(name='main'))
        Builder.load_file("main.kv")
        return WindowManager()


if __name__ == "__main__":
    LabelBase.register(name="Press Start 2P",
                    fn_regular='./font/PressStart2P-Regular.ttf')
    MainApp().run()

主.kv

#: import get_color_from_hex kivy.utils.get_color_from_hex
<WindowManager>:
    MDBottomNavigation: 
        font_name: "./font/PressStart2P-Regular.ttf"
        panel_color: get_color_from_hex("#1B1B1B")
        text_color_active: 1, 1, 0, 1
        MDBottomNavigationItem:
            icon: 'home'
            name: 'shop'
            text: 'МАГАЗИН'
 
        MDBottomNavigationItem:
            icon: 'home'
            name: 'main'
            text: 'ГОЛОВНА' 
            HomeScreen:
  
        MDBottomNavigationItem:
            icon: 'home'
            name: 'items'
            text: 'ХЕЛПЕРИ'

python kivy kivy-language kivymd kivy-recycleview
1个回答
0
投票

简短回答:

将要首先启动的屏幕行移动到顶部位置,如下所示:

class MainApp(MDApp):
    def build(self):
        self.theme_cls.theme_style = "Dark"
        sm = ScreenManager()
        sm.add_widget(HomeScreen(name='main'))
        sm.add_widget(ItemsScreen(name='items'))
        sm.add_widget(ShopScreen(name='menu'))
        Builder.load_file("main.kv")
        return WindowManager()

长答案:在 ScreenManager() 的开头,您正在定义屏幕的顺序。您不能直接从其他屏幕调用这些屏幕。也许这就是你想要的。但是,这里有一个如何实现它的示例:

class MainApp(MDApp):
    def build(self):
        self.theme_cls.theme_style = "Dark"
        sm = ScreenManager()
        sm.add_widget(HomeScreen(name='main'))
        sm.add_widget(ItemsScreen(name='items'))
        sm.add_widget(ShopScreen(name='menu'))

        return sm

        Builder.load_file("main.kv")
        return WindowManager()

当您在另一个屏幕时,您可以使用此代码切换到另一个屏幕。

# In another class, for example, a button event or somewhere else where you have access to the `MainApp` instance
from kivy.uix.screenmanager import ScreenManager

class SomeClass:
    def some_method(self):
        # Get the instance of MainApp and Access the ScreenManager of MainApp
        screen_manager = MainApp.get_running_app().screen_manager

        # Change the currently displayed screen to 'menu'
        screen_manager.current = 'menu'

我希望这对你有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.