You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置Kivy程序启动默认打开主屏幕及自定义菜单图标显示

问题解决方案

修改内容说明

1. 设置默认启动HomeScreen

通过指定MDBottomNavigation的默认选中项,实现启动时直接进入HomeScreen,同时修正屏幕名称与导航项的匹配问题。

2. 实现图标/文字自定义显示

通过绑定布尔变量控制导航项的图标和文字显示状态,支持动态切换仅显示文字、仅显示图标或两者都显示的模式。


修改后的代码

main.py

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import 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"
        # 控制图标和文字显示的开关变量
        self.show_icons = True
        self.show_texts = True
        Builder.load_file("main.kv")
        return WindowManager()

    # 切换图标显示状态
    def toggle_icons(self):
        self.show_icons = not self.show_icons

    # 切换文字显示状态
    def toggle_texts(self):
        self.show_texts = not self.show_texts


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

main.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
        # 设置默认选中HomeScreen对应的导航项
        current: 'main'

        MDBottomNavigationItem:
            # 根据开关变量控制图标显示
            icon: 'home' if app.show_icons else ''
            name: 'shop'
            # 根据开关变量控制文字显示
            text: 'МАГАЗИН' if app.show_texts else ''
            ShopScreen:
 
        MDBottomNavigationItem:
            icon: 'home' if app.show_icons else ''
            name: 'main'
            text: 'ГОЛОВНА' if app.show_texts else ''
            HomeScreen:
  
        MDBottomNavigationItem:
            icon: 'home' if app.show_icons else ''
            name: 'items'
            text: 'ХЕЛПЕРИ' if app.show_texts else ''
            ItemsScreen:

    # 测试用的切换按钮,可根据需求移除
    MDFloatLayout:
        MDRaisedButton:
            text: "切换图标显示"
            pos_hint: {"x":0.1, "top":0.98}
            on_press: app.toggle_icons()
        MDRaisedButton:
            text: "切换文字显示"
            pos_hint: {"x":0.5, "top":0.98}
            on_press: app.toggle_texts()

关键修改点解析

  1. 默认启动HomeScreen:在MDBottomNavigation中添加current: 'main',直接指定启动时选中的导航项;同时修正ShopScreen的名称为'shop',确保与导航项名称匹配。
  2. 自定义显示控制:
    • 静态设置:如果不需要动态切换,直接将对应导航项的icon或text设为空字符串即可(比如icon: ''隐藏图标)。
    • 动态切换:通过show_icons和show_texts变量绑定导航项的属性,配合按钮触发状态切换,实现实时调整显示模式。

内容的提问来源于stack exchange,提问作者Aster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:23:24