KivyMD:如何仅向单个MDBottomNavigation项添加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
相关产品推荐
相关产品推荐

