用户登录后如何更新KivyMD Nav Drawer侧边导航抽屉内容?
问题根因
你遇到的问题有两个核心错误:
- 你在
main.py的build方法中额外单独实例化了一个ContentNavigationDrawer对象,这个对象并没有被加载到界面树中,和KV规则里自动创建的侧边栏抽屉内容实例完全无关,操作这个实例自然不会生效。 - KV中定义的ID是分层级的,
user_email、user_photo属于ContentNavigationDrawer内部的ID,不属于根组件的直接ID集合,所以你直接从self.app.kv.ids里找是找不到的。
修复步骤
第一步:修改main.py的build方法
移除冗余的空实例化代码,把界面中实际加载的ContentNavigationDrawer实例挂载到app属性上:
class main_test(MDApp): def build(self): # 移除冗余代码:self.content = ContentNavigationDrawer() self.kv = Builder.load_string(kv) # 从导航抽屉中拿到实际渲染的ContentNavigationDrawer实例 self.content_drawer = self.kv.ids.nav_drawer.children[0] return self.kv
第二步:修改Login.py的update_user_profile方法
直接通过挂载的content_drawer实例操作内部ID:
def update_user_profile(self): user_photo = "data/img/profile.png" user_email = "user@mail.com" # 现在可以正常更新内容 self.app.content_drawer.ids.user_email.text = user_email self.app.content_drawer.ids.user_photo.source = user_photo # 可选:更新后自动关闭侧边抽屉 # self.app.kv.ids.nav_drawer.set_state("close")
补充说明
你之前修改toolbar生效的原因是toolbar是根组件的直接子组件,ID存在根组件的ids集合里,所以可以直接通过self.app.kv.ids.toolbar访问到。
内容的提问来源于stack exchange,提问作者Ian Rajkumar
相关产品推荐
相关产品推荐

