mddropdownmenu 中的文本没有显示... kivymd

the text inside the mddropdownmenu is not showing up... kivymd

所以我基本上复制了文档中的代码,但文本没有显示,同样的事情也发生在我的应用程序中。 不知道为什么

文档代码:

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 = [{"text": f"Item {i}"} 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()

输出是:

  1. 主屏幕---> enter image description here
  2. 点击下拉项后 ---> enter image description here

MDDropdownMenu 使用 recycle view 呈现 children 所以他们需要指定视图类或要显示的小部件类型 我只是将您的代码更新为使用 OneLineListItemMDDropdownMenu children

from kivy.lang import Builder
from kivy.metrics import dp
from kivy.properties import StringProperty

from kivymd.uix.list import OneLineIconListItem
from kivymd.app import MDApp
from kivymd.uix.menu import MDDropdownMenu

KV = '''
<IconListItem>

    IconLeftWidget:
        icon: root.icon


MDScreen

    MDDropDownItem:
        id: drop_item
        pos_hint: {'center_x': .5, 'center_y': .5}
        text: 'Item 0'
        on_release: app.menu.open()
'''


class IconListItem(OneLineIconListItem):
    icon = StringProperty()


class Test(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.screen = Builder.load_string(KV)
        menu_items = [
            {
                "viewclass": "IconListItem",
                "icon": "git",
                "text": f"Item {i}",
                "height": dp(56),
                "on_release": lambda x=f"Item {i}": self.set_item(x),
            } for i in range(5)
        ]
        self.menu = MDDropdownMenu(
            caller=self.screen.ids.drop_item,
            items=menu_items,
            position="center",
            width_mult=4,
        )
        self.menu.bind()

    def set_item(self, text_item):
        self.screen.ids.drop_item.set_item(text_item)
        self.menu.dismiss()

    def build(self):
        return self.screen


Test().run()