KivyMD 中用户输入的问题
Problems with user's input in KivyMD
我在尝试获取用户输入并在另一个屏幕上使用时遇到了一些问题。首先,在第一个屏幕上,有一个 TextField 和一个 Button,当您单击该按钮时,它会将您带到另一个带有 MDLabel 和另一个按钮的屏幕。我的目的是在第一个屏幕上使用 TextField 获取用户名,然后在第二个屏幕上将其作为文本放入我的 MDLabel 中,例如 Hello, (user's name)
这是我的代码:
from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
screen_helper = """
ScreenManager:
MenuScreen:
ProfileScreen:
<MenuScreen>:
name: 'menu'
input_name: input_name
MDTextField:
id: input_name
hint_text: 'Digite seu nome ou apelido'
pos_hint:{'center_x':0.5,'center_y':0.7}
color_mode:'custom'
line_color_focus: 0.43, 0.82, 0.83, 0.6
MDRectangleFlatButton:
text: 'Entrar'
pos_hint: {'center_x':0.5,'center_y':0.4}
on_press: root.manager.current = 'profile'
<ProfileScreen>:
name: 'profile'
MDLabel:
id: label_welcome
text: "Hello,"
halign: 'center'
MDRectangleFlatButton:
text: 'Back'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_press: root.manager.current = 'menu'
"""
class MenuScreen(Screen):
pass
class ProfileScreen(Screen):
pass
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(ProfileScreen(name='profile'))
class DemoApp(MDApp):
def build(self):
screen = Builder.load_string(screen_helper)
return screen
DemoApp().run()
您必须将 ID 与根小部件上的对象属性配对。
这可能不是最有效的方法,但它对我有用。
我在下面更改了您的代码,实际上是主要更改:
from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty #<--- Object Property
screen_helper = """
MainScreenManager: # <--- changes here
label_: label_welcome
input_name: input_name
MenuScreen:
name: 'menu'
MDTextField:
id: input_name
hint_text: 'Digite seu nome ou apelido'
pos_hint:{'center_x':0.5,'center_y':0.7}
color_mode:'custom'
line_color_focus: 0.43, 0.82, 0.83, 0.6
MDRectangleFlatButton:
text: 'Entrar'
pos_hint: {'center_x':0.5,'center_y':0.4}
on_press:
root.ButtonFunction()
ProfileScreen:
name: 'profile'
MDLabel:
id: label_welcome
text: "Hello,"
halign: 'center'
MDRectangleFlatButton:
text: 'Back'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_press: root.current = 'menu'
"""
class MainScreenManager(ScreenManager): #This gonna be the root widget
label_ = ObjectProperty(None)
input_name = ObjectProperty(None)
def ButtonFunction(self):
self.current = 'profile'
self.label_.text = f'Hello, {self.input_name.text}'
class MenuScreen(Screen):
pass
class ProfileScreen(Screen):
pass
# Create the screen manager
sm = MainScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(ProfileScreen(name='profile'))
class DemoApp(MDApp):
def build(self):
screen = Builder.load_string(screen_helper)
return screen
DemoApp().run()
我在尝试获取用户输入并在另一个屏幕上使用时遇到了一些问题。首先,在第一个屏幕上,有一个 TextField 和一个 Button,当您单击该按钮时,它会将您带到另一个带有 MDLabel 和另一个按钮的屏幕。我的目的是在第一个屏幕上使用 TextField 获取用户名,然后在第二个屏幕上将其作为文本放入我的 MDLabel 中,例如 Hello, (user's name)
这是我的代码:
from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
screen_helper = """
ScreenManager:
MenuScreen:
ProfileScreen:
<MenuScreen>:
name: 'menu'
input_name: input_name
MDTextField:
id: input_name
hint_text: 'Digite seu nome ou apelido'
pos_hint:{'center_x':0.5,'center_y':0.7}
color_mode:'custom'
line_color_focus: 0.43, 0.82, 0.83, 0.6
MDRectangleFlatButton:
text: 'Entrar'
pos_hint: {'center_x':0.5,'center_y':0.4}
on_press: root.manager.current = 'profile'
<ProfileScreen>:
name: 'profile'
MDLabel:
id: label_welcome
text: "Hello,"
halign: 'center'
MDRectangleFlatButton:
text: 'Back'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_press: root.manager.current = 'menu'
"""
class MenuScreen(Screen):
pass
class ProfileScreen(Screen):
pass
# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(ProfileScreen(name='profile'))
class DemoApp(MDApp):
def build(self):
screen = Builder.load_string(screen_helper)
return screen
DemoApp().run()
您必须将 ID 与根小部件上的对象属性配对。
这可能不是最有效的方法,但它对我有用。
我在下面更改了您的代码,实际上是主要更改:
from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty #<--- Object Property
screen_helper = """
MainScreenManager: # <--- changes here
label_: label_welcome
input_name: input_name
MenuScreen:
name: 'menu'
MDTextField:
id: input_name
hint_text: 'Digite seu nome ou apelido'
pos_hint:{'center_x':0.5,'center_y':0.7}
color_mode:'custom'
line_color_focus: 0.43, 0.82, 0.83, 0.6
MDRectangleFlatButton:
text: 'Entrar'
pos_hint: {'center_x':0.5,'center_y':0.4}
on_press:
root.ButtonFunction()
ProfileScreen:
name: 'profile'
MDLabel:
id: label_welcome
text: "Hello,"
halign: 'center'
MDRectangleFlatButton:
text: 'Back'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_press: root.current = 'menu'
"""
class MainScreenManager(ScreenManager): #This gonna be the root widget
label_ = ObjectProperty(None)
input_name = ObjectProperty(None)
def ButtonFunction(self):
self.current = 'profile'
self.label_.text = f'Hello, {self.input_name.text}'
class MenuScreen(Screen):
pass
class ProfileScreen(Screen):
pass
# Create the screen manager
sm = MainScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(ProfileScreen(name='profile'))
class DemoApp(MDApp):
def build(self):
screen = Builder.load_string(screen_helper)
return screen
DemoApp().run()