MDDropDownMenu KivyMD的绑定按钮

Posted

技术标签:

【中文标题】MDDropDownMenu KivyMD的绑定按钮【英文标题】:Bind Button of MDDropDownMenu KivyMD 【发布时间】:2021-01-08 23:47:04 【问题描述】:

我在 KivyMD 的屏幕上有一个 MDTextField。所需的过程是在 TextField 的 on_focus 事件上打开 MDDropDownMenu。此外,一旦您选择了 DropDownMenu 的一个元素,该菜单将被关闭,选择的文本将添加到 MDTextField。

我成功编写了程序的第一部分。尽管如此,我似乎无法正确地绑定按钮。我没有收到错误消息,但似乎从未调用过绑定函数。

这是我的 Kivy 代码:

<TravelManagerWindow>:
    MDTextField:
        id: dest_dropdown_item
        pos_hint: "x":0, 'center_y': 0.5
        write_tab: False
        size_hint: 1, None
        icon_right: 'arrow-down-drop-circle-outline'
        text:'Seleccionar'
        on_focus: if self.focus: root.display_dropdown()

这是我的 Python 代码:

class TravelManagerWindow(Screen):
    def display_dropdown(self):
        # Create the drop down menu
        menu_items = ["text": f"Item i" for i in range(5)]
        self.menu = MDDropdownMenu(
            caller=self.ids.dest_dropdown_item,
            items=menu_items,
            width_mult=4,
        )
        self.menu.open()
        self.menu.bind(on_release=self.set_item)

    def set_item(self, instance_menu, instance_menu_item):
        def set_item(interval):
            self.ids.dest_dropdown_item.text = instance_menu_item.text
            instance_menu.dismiss()
        Clock.schedule_once(set_item, 0.5)

我相信 set_item 函数甚至没有被调用,但是 menu.open() 确实触发了。

有什么建议吗?

非常感谢。

【问题讨论】:

【参考方案1】:

从 master 分支安装 kivymd。

点安装https://github.com/kivymd/KivyMD/archive/master.zip

【讨论】:

【参考方案2】:

同样的问题,

我已经 kivymd 0.104.1

我通过安装 0.104.2dev 解决了

点安装https://github.com/kivymd/KivyMD/archive/master.zip

【讨论】:

【参考方案3】:

到我写这篇文章的时候,安装 kivy fromk master 分支不仅没有解决问题,反而让问题变得更糟。

编辑:找到非主分支安装的修复

self.menu_items=["text": f"item" for item in self.itens]

self.menu = MDDropdownMenu(
                                caller=self.nome,
                                items=self.menu_items,
                                position="bottom",
                                width_mult=4,
                                #Here you'll put that bind func
                                callback = self.function 
                                )     

def function(self,instance):
    #Prints the text of the menu item instance
    print(instance.text)

【讨论】:

以上是关于MDDropDownMenu KivyMD的绑定按钮的主要内容,如果未能解决你的问题,请参考以下文章

编写 MDDropdownMenu 项

第一个 Python/Kivy/KivyMD 应用程序。无法将文本字段中的数据保存到变量 + 数据绑定到 MDList

如何通过按下按钮 kivy/kivymd/python 在另一个窗口中创建按钮

无法让 MDDropdownMenu 和 MDDropDownItem 工作

按下时将动态创建的按钮信息传递给函数。 kivymd, kivy, 蟒蛇

KivyMD 带有下拉菜单的文本字段