【问题标题】:How Can get input from MDTextField when i press Enter当我按 Enter 时如何从 MDTextField 获取输入
【发布时间】:2021-11-19 22:42:35
【问题描述】:

我需要从用户那里获取输入并将其存储在列表中并在滚动视图中显示它,在下面的代码中,我尝试使用 kv 语言创建输入字段并为其分配 id,以便我可以存储输入,问题是我需要用户按下输入并将在 inputField 下面的滚动列表中获得他的输入我需要帮助

> main.py

    from kivy.core import window
    from kivymd.app import MDApp
    from kivy.lang import Builder
    from kivy.core.window import Window
    from kivymd.uix.list import OneLineListItem
    from kivymd.uix.textfield import MDTextField
    
    Window.size = (480,800)

    class INSPECTOR(MDApp):
    def build(self):
        
        self.theme_cls.primary_palette = "Green"
        screen = Builder.load_file('layout.kv')
        #input = self.root.ids.get_barcode.string
        return screen

    def on_start(self):
        self.barcode = self.root.ids.barcode.text
        self.list = []
            

    def on_enter(self):
        self.list.append(self.barcode)
        for i in range(self.list):
            self.item = OneLineListItem(text=f"{self.list[i]}")
            self.root.ids.contaniner.add_widget(self.item)

if __name__ == "__main__":
    INSPECTOR().run()  

layout.kv

Screen:
BoxLayout:
    orientation: 'vertical'
    MDToolbar:
        title: 'INSPECTOR'
        elevation:5

    MDTextField:
        id: barcode
        hint_text: "Scan"
        mode: "rectangle"
        icon_right:'barcode-scan'
        focus: True
        padding_top:
        size_hint_x: None
        size_hint_y: None
        pos_hint: {'center_x':0.5,'center_y':0.6}
        width: 400
        required: True
        helper_text_mode: "on_error"
        helper_text: "Enter text"
        on_text: app.on_enter

    GridLayout:
        padding:50
        cols:1
        ScrollView:
            MDList:
                id: contaniner

我想知道当我按下 Enter 按钮时如何创建一个存储数据的输入字段

【问题讨论】:

    标签: python input kivy kivymd


    【解决方案1】:

    每次文本更改时都会触发 MDTextFieldon_text 事件。如果可以使用单行MDTextField,那么可以将kv修改为:

        MDTextField:
            id: barcode
            hint_text: "Scan"
            mode: "rectangle"
            icon_right:'barcode-scan'
            focus: True
            padding_top:
            size_hint_x: None
            size_hint_y: None
            pos_hint: {'center_x':0.5,'center_y':0.6}
            width: 400
            required: True
            helper_text_mode: "on_error"
            helper_text: "Enter text"
            multiline: False  # single line
            on_text_validate: app.on_enter()  # call on_enter() when enter is pressed
    

    注意multilineon_text_validate 属性。

    那么on_enter()方法可以是:

    def on_enter(self):
        text = self.root.ids.barcode.text
        self.list.append(text)
        for i in range(len(self.list)):
            self.item = OneLineListItem(text=f"{self.list[i]}")
            self.root.ids.contaniner.add_widget(self.item)
    

    【讨论】:

    • 它工作并将小部件推送到滚动视图,但没有从输入字段获取文本
    • 行:text = self.root.ids.barcode.textMDTextField 获取文本。在此之后添加 print() 语句以查看文本内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 2011-11-11
    • 2019-12-15
    • 1970-01-01
    相关资源
    最近更新 更多