KivyMD框架MDDropdownMenu组件内部文字不显示问题求助
问题根因
该问题由KivyMD版本迭代带来的API不兼容导致,你使用的官方文档示例为旧版本API写法,无法适配v1.0.0及以上版本的KivyMD库。
解决方案
方案1:适配新版API修改代码(推荐)
新版MDDropdownMenu要求菜单项配置必须显式指定视图类,仅需调整menu_items的构造逻辑即可修复问题,修改后的完整可运行代码如下:
from kivy.lang import Builder from kivymd.app import MDApp from kivymd.uix.menu import MDDropdownMenu KV = """ #:import toast kivymd.toast.toast MDScreen: MDDropDownItem: id: dropdown_item text: 'Item 0' pos_hint: {'center_x': .5, 'center_y': .6} current_item: 'Item 0' on_release: app.menu.open() MDRaisedButton: pos_hint: {'center_x': .5, 'center_y': .3} text: 'Check Item' on_release: toast(dropdown_item.current_item) """ class Example(MDApp): def __init__(self, **kwargs): super().__init__(**kwargs) self.screen = Builder.load_string(KV) # 仅修改此处的menu_items构造逻辑 menu_items = [ { "viewclass": "OneLineListItem", "text": f"Item {i}", "text_color": self.theme_cls.text_color } for i in range(5) ] self.menu = MDDropdownMenu( caller=self.screen.ids.dropdown_item, items=menu_items, position="center", width_mult=4, ) self.menu.bind(on_release=self.set_item) def set_item(self, instance_menu, instance_menu_item): self.screen.ids.dropdown_item.set_item(instance_menu_item.text) instance_menu.dismiss() def build(self): return self.screen Example().run()
核心修改点:
- 每个菜单项配置增加
viewclass参数,指定使用OneLineListItem作为渲染视图 - 显式指定
text_color跟随当前主题文本色,避免主题配色冲突导致文本和背景同色
方案2:降级KivyMD到兼容版本
如果不需要使用新版KivyMD的特性,可直接降级到适配旧API的版本,执行以下安装命令即可:pip install kivymd==0.104.2
修改完成后重新运行代码,下拉菜单即可正常显示文本内容。
内容的提问来源于stack exchange,提问作者I3lackI3uck
相关产品推荐
相关产品推荐

