如何在 kivymd 中添加多个文本字段

How to add multiple textfield in kivymd

我正在制作一个表单屏幕,用户可以在其中输入数据并将其上传到数据库。如果他们仍然想添加一些内容,我希望他们能够在按下按钮时添加多个文本字段。它应该是可滚动的,因为文本字段的数量取决于用户真正想要的数量。我这里有这段代码,但它并没有真正按照我的想法去做。

from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import Screen
from kivy.uix.boxlayout import BoxLayout
from kivymd.uix.tab import MDTabsBase
from kivymd.uix.floatlayout import MDFloatLayout
from kivymd.uix.textfield import MDTextField

class TextField(MDTextField):
    pass

class Tab(MDFloatLayout, MDTabsBase):
    pass


class FormScreen(Screen):
    pass

class DemoApp(MDApp):
#function to add text field
def add_textfield(self):
    self.help.get_screen('form').ids.box.add_widget(
    TextField(hint_text= 'adsf',
    ))

def upload(self):
    
    name = self.help.get_screen('form').ids.input_1.text


def build(self):
    self.help = Builder.load_file('form.kv')
    # screen.add_widget(self.help)
    return self.help

这是我的 kv 文件:

ScreenManager:
    FormScreen:

<FormScreen>
    name: 'form'
    MDBoxLayout:
        orientation: "vertical"
        MDToolbar:
            # md_bg_color:app.dark2
            title: "Upload Data"
            type_height: "small"
            left_action_items: [["arrow-left", lambda x : app.swtchScreen('collections')]]
            right_action_items: [["eraser", lambda x : root.eraser()],["plus", lambda x : app.add_textfield()]]
        MDTabs:
            id: tabs
            background_color: rgba(0,0,0,0)
            tab_hint_x: True
            Tab:
                title: "Passport Data"
                MDTextField:
                    id: input_1
                    hint_text: "Name"
                    pos_hint: {"center_x": 0.5, "center_y": 0.95}
                    size_hint: .75,0.09
                    color_mode: 'accent'
                    mode: "rectangle"

                #additional textfieldss
                MDTextField:
                    id: box

谢谢

您可以修改 Tab 来自定义您需要的布局,如下所示,

        MDTabs:
            id: tabs
            background_color: rgba(0,0,0,0)
            tab_hint_x: True
            Tab:
                title: "Passport Data"
                MDBoxLayout: # Add main container.
                    orientation: "vertical"
                    padding: dp(10)
                    spacing: dp(5)
                    MDTextField:
                        id: input_1
                        hint_text: "Name"
#                        pos_hint: {"center_x": 0.5, "center_y": 0.95}
#                        size_hint: .75,0.09 # "size_hint_y" will be set automatically.
                        pos_hint: {"center_x": 0.5}
                        size_hint_x: .75
                        color_mode: 'accent'
                        mode: "rectangle"

                    #additional textfields
                    ScrollView:
                        MDBoxLayout: # Add all text fields in this container.
                            id: box
                            orientation: "vertical"
                            adaptive_height: True # Grow vertically.

或者您可以从 MDBoxLayout

继承 Tab
class Tab(MDBoxLayout, MDTabsBase):
    pass

那么 kvlang 就是

        MDTabs:
            id: tabs
            background_color: rgba(0,0,0,0)
            tab_hint_x: True
            Tab:
                title: "Passport Data"
                orientation: "vertical"
                padding: dp(10)
                spacing: dp(5)
                MDTextField:
                    id: input_1
                    hint_text: "Name"
#                    pos_hint: {"center_x": 0.5, "center_y": 0.95}
#                    size_hint: .75,0.09 # "y" will be set automatically.
                    pos_hint: {"center_x": 0.5}
                    size_hint_x: .75
                    color_mode: 'accent'
                    mode: "rectangle"

                #additional textfieldss
                ScrollView:
                    MDBoxLayout: # Add all text field here.
                        id: box
                        orientation: "vertical"
                        adaptive_height: True # Grow vertically.