如何从 MDTextField 获取输入?

How do I get the input from MDTextField?

正在测试应用程序,但我找不到从文本字段获取输入的方法。 我希望能够获取用户名和密码的输入,并使用它插入 SQL 从某个帐户获取数据。据我了解,我可以按下提交按钮,应该调用我称为 s1 的函数并打印我的输入,但我收到此错误:

 File "C:/Users/63917/PycharmProjects/kivymd/mobile.py", line 121, in s1
     print(self.root.ids.userdata.text)
   File "kivy\properties.pyx", line 863, in kivy.properties.ObservableDict.__getattr__
 AttributeError: 'super' object has no attribute '__getattr__'
screen_helper = """
ScreenManager:
    MenuScreen:
    SubmitScreen:
    UploadScreen:

<MenuScreen>:
    name: 'menu'
    
    MDTextField:
        id: userdata
        hint_text: "Enter Username"
        helper_text: "or click on forgot username"
        #helper_text_mode: "persistent"
        helper_text_mode: "on_focus"
        icon_right: "account"
        icon_right_color: app.theme_cls.primary_color
        pos_hint : {'center_x': 0.5, 'center_y': 0.8}
        size_hint_x:None 
        width:250
        mode : "rectangle"    
    MDTextField:
      
        hint_text: "Enter Password"
        helper_text: "or click on forgot Password"
        #helper_text_mode: "persistent"
        password : True
        # password_mask : "*"
        helper_text_mode: "on_focus"
        icon_right: "eye-off"
        icon_right_color: app.theme_cls.primary_color
        pos_hint : {'center_x': 0.5, 'center_y': 0.7}
        size_hint_x:None 
        width:250        
        mode : "rectangle"      
    MDLabel:
        text: "Lil's Lending Shop"
        pos_hint: {'center_x':0.8, 'center_y':0.9}
  
       
    MDRectangleFlatButton:
        text: 'Submit'
        pos_hint: {'center_x':0.5, 'center_y':0.4}
        font_size : 20
        #on_press: root.manager.current = 'submit'
  
           
    MDRectangleFlatButton:
        text: 'Upload'
        pos_hint: {'center_x':0.5, 'center_y':0.5}
        on_press: root.manager.current = 'upload' 
           
<SubmitScreen>:
    name: 'submit'
    MDLabel:
        text: 'Welcome Oliver'
        halign: 'center'

    MDRectangleFlatButton:
        text: 'Menu'
        pos_hint: {'center_x':0.5, 'center_y':0.2}
        on_press: root.manager.current = 'menu'    
       
<UploadScreen>:
    name: 'upload'
    MDLabel:
        text: 'upload daw ek ek'
        halign: 'center'

    MDRectangleFlatButton:
        text: 'Menu'
        pos_hint: {'center_x':0.5, 'center_y':0.2}
        on_press: root.manager.current = 'menu'    

"""


class MenuScreen(Screen):
    pass


class SubmitScreen(Screen):

    pass

class UploadScreen(Screen):
    pass


sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SubmitScreen(name='submit'))
sm.add_widget(UploadScreen(name='upload'))


class DemoApp(MDApp):

    def build(self):
        screen = Builder.load_string(screen_helper)
        return screen
    def s1(self):
        print(self.root.ids.userdata.text)
   



DemoApp().run()

这是因为您正在使用 self.root.ids.userdata.textself.root 是您的 ScreenManager,它不包含您的文本字段,但 MainScreen 包含。因此,您必须先获取 MainScreen,然后从中获取用户数据。要获得 MainScreen,您必须使用 get_screen() 函数。所以,最后会是 self.root.get_screen("menu").ids.userdata.text