MDTopAppBar无内容显示:复制官方代码运行结果不符预期
MDTopAppBar显示异常问题排查
问题描述
复制KivyMD官网提供的MDTopAppBar示例代码后,运行结果与官网展示完全不同,且自行开发时MDTopAppBar始终无内容显示。示例代码如下:
from kivy.lang import Builder from kivy.metrics import dp from kivymd.app import MDApp from kivymd.uix.menu import MDDropdownMenu from kivymd.uix.snackbar import MDSnackbar KV = ''' MDBoxLayout: orientation: "vertical" MDTopAppBar: title: "MDTopAppBar" left_action_items: [["menu", lambda x: app.callback(x)]] right_action_items: [["dots-vertical", lambda x: app.callback(x)]] MDLabel: text: "Content" halign: "center" ''' class Test(MDApp): def build(self): self.theme_cls.primary_palette = "Orange" self.theme_cls.theme_style = "Dark" menu_items = [ { "text": f"Item {i}", "on_release": lambda x=f"Item {i}": self.menu_callback(x), } for i in range(5) ] self.menu = MDDropdownMenu(items=menu_items) return Builder.load_string(KV) def callback(self, button): self.menu.caller = button self.menu.open() def menu_callback(self, text_item): self.menu.dismiss() MDSnackbar(text=text_item).open() Test().run()
问题原因
核心原因是KivyMD版本不兼容:官网文档示例通常对应最新稳定版,但当前使用的KivyMD版本可能较旧,组件API或默认行为存在差异,导致MDTopAppBar渲染异常、菜单功能失效。
解决方案
1. 升级KivyMD到最新稳定版
执行以下命令升级:
pip install --upgrade kivymd
升级后直接运行原代码即可匹配官网展示效果。
2. 适配旧版本代码(如果无法升级)
若因环境限制无法升级,需调整代码适配旧版本KivyMD的API:
- 给
MDTopAppBar明确设置高度,避免布局挤压导致无内容显示 - 给
MDDropdownMenu指定width_mult参数,确保菜单正常显示
修改后的代码:
from kivy.lang import Builder from kivy.metrics import dp from kivymd.app import MDApp from kivymd.uix.menu import MDDropdownMenu from kivymd.uix.snackbar import MDSnackbar KV = ''' MDBoxLayout: orientation: "vertical" MDTopAppBar: title: "MDTopAppBar" left_action_items: [["menu", lambda x: app.callback(x)]] right_action_items: [["dots-vertical", lambda x: app.callback(x)]] size_hint_y: None height: dp(64) MDLabel: text: "Content" halign: "center" ''' class Test(MDApp): def build(self): self.theme_cls.primary_palette = "Orange" self.theme_cls.theme_style = "Dark" menu_items = [ { "text": f"Item {i}", "on_release": lambda x=f"Item {i}": self.menu_callback(x), } for i in range(5) ] # 添加width_mult参数,适配旧版本菜单宽度 self.menu = MDDropdownMenu(items=menu_items, width_mult=4) return Builder.load_string(KV) def callback(self, button): self.menu.caller = button self.menu.open() def menu_callback(self, text_item): self.menu.dismiss() MDSnackbar(text=text_item).open() Test().run()
内容的提问来源于stack exchange,提问作者SomeBoy
相关产品推荐
相关产品推荐

