Kivy - Как получить содержимое TextInput - PullRequest
1 голос
/ 20 ноября 2019

Я не знаю, как получить информацию из поля ввода текста. Другие вопросы не помогли, поэтому я надеюсь, что кто-то может помочь мне в моем конкретном случае. Я использую Kivy v.1.11.1 и Python 3.7.

Вот мой код:

user.py

"""User-end software for signup/account data."""
from kivy.app import App
from kivy.uix.widget import Widget


class LoginScreen(Widget):
    """Class for login screen contents."""

    pass  # Python code for TextInput boxes should go here, I think.


class UserApp(App):
    """Main app."""

    def build(self):
        """Build app."""
        return LoginScreen()


if __name__ == '__main__':
    UserApp().run()

user.kv

#:kivy 1.11.1

<LoginScreen>:
    Label:
        font_size: 20
        center_x: root.width / 2
        top: root.top + 20
        text: "Offbox Insurance"
    Label:
        font_size: 64
        center_x: root.width / 2
        top: root.top - 30
        text: "Log in"

    Label:
        font_size: 20
        center_x: root.width / 2
        top: root.top - 140
        text: "Email"
    TextInput:
        id: email_input
        font_size: 24
        height: 40
        width: root.width * 5 / 7
        center_x: root.width / 2
        top: root.top - 216
        multiline: False

    Label:
        font_size: 20
        center_x: root.width / 2
        top: root.top - 240
        text: "Password"
    TextInput:
        id: password_input
        font_size: 24
        height: 40
        width: root.width * 5 / 7
        center_x: root.width / 2
        top: root.top - 316
        multiline: False

    Button:
        font_size: 20
        height: 50
        center_x: root.width / 2
        top: root.top - 380
        text: "Log in"

    Label:
        font_size: 16
        center_x: root.width / 2
        top: root.height / 12 + 75
        text: "Don't have an account?"
    Button:
        font_size: 16
        height: 36
        center_x: root.width / 2
        top: root.height / 12 + 5
        text: "Sign up"

Мне нужно, чтобы оба TextInputs были сохранены в своих переменных, чтобы я мог обрабатывать их отдельно.

1 Ответ

1 голос
/ 20 ноября 2019

TextInput тексты могут быть отображены через StringProperty. Кроме того, если вы хотите получить эту информацию при нажатии любой из кнопок, вы должны вызвать функцию с помощью on_press.

"""User-end software for signup/account data."""
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import StringProperty


class LoginScreen(Widget):
    """Class for login screen contents."""

    email = StringProperty()
    password = StringProperty()

    def login(self):
        print("email:", self.email, "password:", self.password)


class UserApp(App):
    """Main app."""

    def build(self):
        """Build app."""
        return LoginScreen()


if __name__ == "__main__":
    UserApp().run()
#:kivy 1.11.1

<LoginScreen>:
    email: email_input.text
    password: password_input.text
    Label:
        font_size: 20
        center_x: root.width / 2
        top: root.top + 20
        text: "Offbox Insurance"
    Label:
        font_size: 64
        center_x: root.width / 2
        top: root.top - 30
        text: "Log in"
    Label:
        font_size: 20
        center_x: root.width / 2
        top: root.top - 140
        text: "Email"
    TextInput:
        id: email_input
        font_size: 24
        height: 40
        width: root.width * 5 / 7
        center_x: root.width / 2
        top: root.top - 216
        multiline: False
    Label:
        font_size: 20
        center_x: root.width / 2
        top: root.top - 240
        text: "Password"
    TextInput:
        id: password_input
        font_size: 24
        height: 40
        width: root.width * 5 / 7
        center_x: root.width / 2
        top: root.top - 316
        multiline: False
        password: True
    Button:
        font_size: 20
        height: 50
        center_x: root.width / 2
        top: root.top - 380
        text: "Log in"
        on_press: root.login()
    Label:
        font_size: 16
        center_x: root.width / 2
        top: root.height / 12 + 75
        text: "Don't have an account?"
    Button:
        font_size: 16
        height: 36
        center_x: root.width / 2
        top: root.height / 12 + 5
        text: "Sign up"
...