Как получить входные данные от пользователя и сохранить их в списке (Python Kivy)? - PullRequest
0 голосов
/ 28 марта 2019

Я новичок в модуле kivy. Я хочу поместить 8 текстовых полей на экран, чтобы получить ввод от пользователя, а затем сохранить эти входные данные в списке, чтобы использовать их позже!

Я искал в интернете, но ничего полезного не нашел.

Я думаю, что я должен сделать что-то вроде этого кода: Сохранение ввода текста в переменную в приложении kivy

Но я не хочу показывать входные данные в shell, я хочу сохранить их в списке!

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Py file

  • Используйте цикл for, чтобы пройти через контейнер всех виджетов, например. TextInput.

Отрывки

    for child in reversed(self.container.children):
        if isinstance(child, TextInput):
            self.data_list.append(child.text)

файл кв

  • Используйте контейнер, например. GridLayout
  • Добавить id для контейнера
  • Добавьте все эти Label и TextInput виджеты как дочерние для GridLayout

Отрывки

    GridLayout:
        id: container
        cols: 2

        Label:
            text: "Last Name:"
        TextInput:
            id: last_name

Пример

main.py

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.uix.textinput import TextInput
from kivy.properties import ObjectProperty, ListProperty
from kivy.lang import Builder

Builder.load_file('main.kv')


class MyScreen(Screen):
    container = ObjectProperty(None)
    data_list = ListProperty([])

    def save_data(self):
        for child in reversed(self.container.children):
            if isinstance(child, TextInput):
                self.data_list.append(child.text)

        print(self.data_list)


class TestApp(App):
    def build(self):
        return MyScreen()


if __name__ == "__main__":
    TestApp().run()

main.kv

#:kivy 1.11.0

<MyScreen>:
    container: container
    BoxLayout:
        orientation: 'vertical'

        GridLayout:
            id: container
            cols: 2
            row_force_default: True
            row_default_height: 30
            col_force_default: True
            col_default_width: dp(100)

            Label:
                text: "Last Name:"
            TextInput:
                id: last_name

            Label:
                text: "First Name:"
            TextInput:
                id: first_name

            Label:
                text: "Age:"
            TextInput:
                id: age

            Label:
                text: "City:"
            TextInput:
                id: city

            Label:
                text: "Country:"
            TextInput:
                id: country

        Button:
            text: "Save Data"
            size_hint_y: None
            height: '48dp'

            on_release: root.save_data()

выход

Result

1 голос
/ 28 марта 2019

Вам нужно дать свои текстовые данные id с, затем сослаться на id из них и получить их текст, используя .text. self.root в классе TestApp ссылается на корневой виджет вашего файла kv, который не имеет скобок (< >) вокруг него, в данном случае GridLayout.

main.py

from kivy.app import App

class MainApp(App):
    def get_text_inputs(self):
        my_list = [self.root.ids.first_input_id.text, self.root.ids.second_input_id.text]
        print(my_list)
    pass

MainApp().run()

main.kv

GridLayout:
    cols: 1
    TextInput:
        id: first_input_id
    TextInput:
        id: second_input_id
    Button:
        text: "Get the inputs"
        on_release:
            app.get_text_inputs()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...