【问题标题】:Kivy MDDropDownMenu callback function is not being invokedKivy MDDropDownMenu 回调函数未被调用
【发布时间】:2020-09-16 19:05:57
【问题描述】:

因此下拉菜单会显示所有选项,但单击它们时不会调用回调函数。 问题可能是什么? 提前致谢! 这是main.py:

def __init__(self, **kwargs):
    self.screen = Builder.load_file('main.kv')
    channels = ['channel1', 'channel2', 'channel3', 'channel4']
    self.channels_menu = MDDropdownMenu(
        caller=self.screen.ids.add_client_screen.ids.channels_drop_item,
        items=[{"text": i} for i in channels],
        position="center",
        width_mult=4,
    )
    self.channels_menu.bind(on_release=self.menu_callback)

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

def build(self):
    return self.screen

这是.kv:

<AddClientScreen>:

    text: "AddClient"

    MDBoxLayout:
       orientation: "vertical"

        MDBoxLayout:
            spacing: 50
            orientation: "vertical"
            size_hint: 1, 0.65
        
        MDDropDownItem:
            id: channels_drop_item
            text: "Channel"
            on_release: app.channels_menu.open()

【问题讨论】:

    标签: kivy kivymd


    【解决方案1】:

    从 master 分支更新 KivyMD 库。新 API 仅在主版本 (dev) 中可用 - https://github.com/kivymd/KivyMD/blob/master/kivymd/__init__.py#L35

    【讨论】:

    • 感谢您的回答!我这样做了。之后我得到“ValueError: KivyMD: App object must be initialized before loading root widget”,所以我将 Builder.load_file() 移动到 build 方法并将 MDDropDownMenu 中的调用者更改为“self.root.ids .add_client_screen.ids.channels_drop_item”。现在,我收到错误“AttributeError:'MainApp' 对象没有属性'root'”。我该如何解决?
    • 我通过将菜单从 __init__() 中取出,然后使用 Clock.schedule_once() 调用它来解决这个问题。
    猜你喜欢
    • 2020-04-01
    • 1970-01-01
    • 2017-06-29
    • 2020-10-31
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多