【问题标题】:KivyMD TextField with DropDownKivyMD 带有下拉菜单的文本字段
【发布时间】:2021-05-25 00:14:16
【问题描述】:

我是 kivyMD 的新手,我遇到了这个问题。我正在尝试将 TextField 与 DropDown 绑定,并且当从 DropDown 中选择一个项目以填充 TextFied 中的文本时,但是当我单击一个项目时没有任何反应。你能帮帮我吗?

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

KV = '''
Screen
    MDTextField:
        id: field
        pos_hint: {'center_x': .5, 'center_y': .5}
        size_hint_x: None
        width: "200dp"
        hint_text: "Material"
        on_focus: if self.focus: app.menu.open()
'''


class Test(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.screen = Builder.load_string(KV)

        items = ['PVC', 'XLPE']

        menu_items = [{"text": f"{i}"} for i in items]

        self.menu = MDDropdownMenu(
                                    caller=self.screen.ids.field,
                                    items=menu_items,
                                    position="bottom",
                                    width_mult=3,
                                    )

        self.menu.bind(on_release=self.set_item)

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

    def build(self):
        return self.screen


Test().run()

【问题讨论】:

    标签: python drop-down-menu textfield kivymd


    【解决方案1】:

    从 master 分支更新 KivyMD 库 - pip install https://github.com/kivymd/KivyMD/archive/master.zip

    【讨论】:

      【解决方案2】:
      class Test(MDApp):
          def __init__(self, **kwargs):
              super().__init__(**kwargs)
              self.screen = Builder.load_string(KV)
              menu_items = [
                  {
                      "text": f"Item {i}",
                      "viewclass": "OneLineListItem",
                      "on_release": lambda x=f"Item {i}": self.menu_callback(x),
                  } for i in range(5)
              ]
              self.menu = MDDropdownMenu(
                  caller=self.screen.ids.button,
                  items=menu_items,
                  width_mult=4,
              )
      
          def menu_callback(self, text_item):
              print(text_item)
      
          def build(self):
              return self.screen
      

      【讨论】:

      • def menu_callback(self, text_item): print(text_item)
      • 我需要将它添加到文本字段中作为下拉列表中的选项
      • 你能解释一下你的答案吗?问题是什么,您是如何解决的?
      猜你喜欢
      • 2011-01-02
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 2014-06-24
      • 2021-10-05
      • 1970-01-01
      • 2018-12-21
      • 2021-11-27
      相关资源
      最近更新 更多