Python kivy (kivyMD) 如何获取MDDropdownMenu的值

MrY*_*ath 3 python kivy drop-down-menu kivy-language

我正在尝试通过以下代码获取MDDropwdownMenu我正在使用的 kv 文件中的选择MDRaisedButton

\n\n
 MDRaisedButton:\n                            id: select_warning_image_Button\n                            text: "Menu labels"                          \n                            opposite_colors:    True\n                            elevation_normal:    0\n                            on_release: MDDropdownMenu(items=app.menu_labels, width_mult=4).open(self)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的main.py(见下文)中,我有一个名为的类MainApp继承自App. 在这个类中我创建了属性变量menu_labels。我想使用该函数change_variable将变量的值设置VARIABLE为菜单的值。但我似乎无法使用 self.change_variable(\xe2\x80\xa6)。当选择下拉列表中的特定值时,是否有一个值可以触发函数?

\n\n
# main.py\nimport \xe2\x80\xa6\n\n\nclass MainApp(App):\n    VARIABLE = ""\n\n    menu_labels = [\n        {"viewclass": "MDMenuItem",\n         "text": "Label1",\n         "on_release": self.change_variable("Label1")},\n        {"viewclass": "MDMenuItem",\n         "text": "Label2",\n         "on_release": self.change_variable("Label2")},\n    ]\n\n    def change_variable(self, label):\n        self.VARIABLE = label\n
Run Code Online (Sandbox Code Playgroud)\n

iko*_*lim 5

解决方案

在输出中,Label2被选中。有关详细信息,请参阅代码片段、示例和输出。

kv文件

  1. 添加类别规则<MDMenuItem>:
  2. 添加on_release事件以调用change_variable()App 类中的方法并传递self.text给它。

片段 - kv 文件

<MDMenuItem>:
    on_release: app.change_variable(self.text)
Run Code Online (Sandbox Code Playgroud)

例子

主要.py

from kivy.app import App
from kivymd.theming import ThemeManager


class MainApp(App):
    title = "KivyMD MDDropdownMenu Demo"
    theme_cls = ThemeManager()

    VARIABLE = ""

    menu_labels = [
        {"viewclass": "MDMenuItem",
         "text": "Label1"},
        {"viewclass": "MDMenuItem",
         "text": "Label2"},
    ]

    def change_variable(self, value):
        print("\nvalue=", value)
        self.VARIABLE = value
        print("\tself.VARIABLE=", self.VARIABLE)


if __name__ == "__main__":
    MainApp().run()
Run Code Online (Sandbox Code Playgroud)

主干电压

#:kivy 1.11.0
#:import MDDropdownMenu kivymd.menu.MDDropdownMenu
#:import MDRaisedButton kivymd.button.MDRaisedButton

<MDMenuItem>:
    on_release: app.change_variable(self.text)

Screen:
    name: 'menu'
    MDRaisedButton:
        id: select_warning_image_Button
        size_hint: None, None
        size: 3 * dp(48), dp(48)
        text: 'Menu labels'
        opposite_colors: True
        elevation_normal:    0
        pos_hint: {'center_x': 0.1, 'center_y': 0.9}
        on_release: MDDropdownMenu(items=app.menu_labels, width_mult=4).open(self)
Run Code Online (Sandbox Code Playgroud)

输出

Img01 - MDDropdownMenu 打开 Img02 - 选定的标签2