如何从 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.text
。 self.root
是您的 ScreenManager
,它不包含您的文本字段,但 MainScreen
包含。因此,您必须先获取 MainScreen
,然后从中获取用户数据。要获得 MainScreen
,您必须使用 get_screen()
函数。所以,最后会是 self.root.get_screen("menu").ids.userdata.text
正在测试应用程序,但我找不到从文本字段获取输入的方法。 我希望能够获取用户名和密码的输入,并使用它插入 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.text
。 self.root
是您的 ScreenManager
,它不包含您的文本字段,但 MainScreen
包含。因此,您必须先获取 MainScreen
,然后从中获取用户数据。要获得 MainScreen
,您必须使用 get_screen()
函数。所以,最后会是 self.root.get_screen("menu").ids.userdata.text