编写 MDDropdownMenu 项

Write the MDDropdownMenu item

我尝试在 MDDropdownMenu 中写入所选项目。 但是,即使有了这段代码,我也找不到 menu.bind (.....) 函数

没有任何结果
from kivymd.app import MDApp
from kivymd.uix.menu import MDDropdownMenu
from kivy.lang import Builder
from kivy.clock import Clock
from kivymd.uix.screen import Screen


KV = """
<BuildApp>:

    MDRaisedButton:
        id: button
        text: "PRESS ME"
        pos_hint: {"center_x": .5, "center_y": .5}
        on_release: root.menu.open()

BuildApp:
"""

class BuildApp(Screen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        Clock.schedule_once(self._late_init)

    def _late_init(self, interval):
        menu_items = [{"text": f"Item {i}"} for i in range(5)]
        self.menu = MDDropdownMenu(
            caller=self.ids.button,
            items=menu_items,
            width_mult=4,
        )
        self.menu.bind(on_release=self.menu_callback)



    def menu_callback(self, instance_menu, instance_menu_item):
        print(instance_menu, instance_menu_item)


class MainApp(MDApp):
    def build(self):
        self.root = Builder.load_string(KV)


MainApp().run()

另外,.kv文件中的MDDropdownMenu部分怎么写

此致

使用 callback 属性 的 MDDropdownMenu:

def _late_init(self, interval):
    menu_items = [{"text": f"Item {i}"} for i in range(5)]
    self.menu = MDDropdownMenu(
        caller=self.ids.button,
        items=menu_items,
        callback=self.menu_callback,
        width_mult=4,
    )

def menu_callback(self,instance_menu_item):
    print(instance_menu_item.text)

您可以在kv中定义下拉菜单,像这样:

from kivymd.app import MDApp
from kivymd.uix.menu import MDDropdownMenu
from kivy.lang import Builder
from kivy.clock import Clock
from kivymd.uix.screen import Screen


KV = """
<MyMenu>:
    items: [{'text':'item 0'}, {'text':'item 1'}, {'text':'item 2'}, {'text':'item 3'}, {'text':'item 4'}]
    caller: app.root.ids.button
    callback: app.root.menu_callback
    width_mult: 4

<BuildApp>:
    MDRaisedButton:
        id: button
        text: "PRESS ME"
        pos_hint: {"center_x": .5, "center_y": .5}
        on_release: root.menu.open()

BuildApp:
"""

class MyMenu(MDDropdownMenu):
    pass


class BuildApp(Screen):

    def menu_callback(self, instance_menu_item):
        print(instance_menu_item.text)


class MainApp(MDApp):
    def build(self):
        root = Builder.load_string(KV)
        Clock.schedule_once(self.build_menu)
        return root

    def build_menu(self, dt):
        # cannot create menu until after app is built because of references to app.root in kv
        self.root.menu = MyMenu()


MainApp().run()