Проблемы с вводом данных пользователем в KivyMD - PullRequest
0 голосов
/ 14 июля 2020

У меня возникли проблемы при попытке получить ввод пользователя и использовать его на другом экране. Прежде всего, на первом экране есть TextField и Button, когда вы нажимаете кнопку, вы переходите на другой экран с MDLabel и другой кнопкой. Я намерен получить имя пользователя с помощью TextField на первом экране, а затем поместить его как текст в моем MDLabel на втором экране, например Hello, (имя пользователя)

Вот мой код:

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()

1 Ответ

0 голосов
/ 14 июля 2020

Вы должны связать идентификаторы со свойствами объекта на root виджете.

Возможно, это не самый эффективный способ, но он работает для меня.

Я изменил ваш код ниже, на самом деле основные изменения:

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()
...