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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:51:04