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

KivyMD:如何仅向单个MDBottomNavigation项添加ProgressBar

解决MDBottomNavigationItem中添加ProgressBar的问题

我看到你遇到的问题了——你想只给Goals这个底部导航项添加进度条,但之前的代码找不到对应的GoalsBN实例,而且还有个小细节你可能没注意到,咱们一步步来解决:

第一步:修复KV文件中的ID定义

你在KV里给MDBottomNavigationItem写的id: 'GoalsBN'是错误的,KV语言里id不需要加引号,引号会让它变成字符串字面量,导致后续无法通过ids正确获取控件。修改成:

MDBottomNavigationItem:
    text: 'Goals'
    id: GoalsBN  # 去掉引号
    name: 'GoalsBN'
    icon: 'trending-up'
    # ... 其余代码不变

第二步:正确获取GoalsBN实例

你的self.root是WindowManager,它的ids里并没有GoalsBN,因为这个导航项是属于HomeScreen这个子屏幕的。所以你需要先获取HomeScreen的实例,再从中获取GoalsBN:

修改Python文件中的addNewGoal方法:

def addNewGoal(self, inst):
    progressbar = ProgressBar(
        value=50,
        max=100,
        # 可以加一些布局参数,让进度条显示更合理
        pos_hint={'x':0.1, 'y':0.2},
        size_hint=(0.8, 0.05)
    )
    # 先获取HomeScreen实例
    home_screen = self.root.get_screen('HomeScreen')
    # 再获取GoalsBN导航项
    goals_nav_item = home_screen.ids.GoalsBN
    # 将进度条添加到导航项中
    goals_nav_item.add_widget(progressbar)
    self.dialog.dismiss()

补充优化(可选)

如果你想把进度条添加到导航项内的特定布局(比如里面的FloatLayout),可以给那个FloatLayout也加个id,比如:

MDBottomNavigationItem:
    id: GoalsBN
    # ...
    FloatLayout:
        id: goals_content_layout
        # ... 其余代码

然后修改Python代码:

goals_content = home_screen.ids.goals_content_layout
goals_content.add_widget(progressbar)

这样能更精准地控制进度条的位置。

这样修改后,你点击"CREATE"按钮添加的进度条就只会出现在Goals导航项里,切换其他底部导航时就不会显示啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:32:43