简体   繁体   中英

How to get inputs from user and save them in a list(Python Kivy)?

I'm beginner in kivy module. I want to put 8 textboxes in screen to get input from user and then, save this inputs in a list in order to use them later!

I searched in the internet but a didn't find any thing useful.

I think I should do sth like this code: Save text input to a variable in a kivy app

But don't want to show the inputs in shell , I wanna save them in a list!

You need to give your text inputs id s, then reference the id of them and get their text using .text . self.root in the TestApp class refers to the root widget of your kv file, which is the one that doesn't have brackets ( < > ) around it, in this case the 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()

Py file

  • Use a for loop to traverse through a container of all widgets eg TextInput .

Snippets

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

kv file

  • Use a container eg GridLayout
  • Add an id for the container
  • Add all those Label and TextInput widgets as child of GridLayout

Snippets

    GridLayout:
        id: container
        cols: 2

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

Example

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

Output

结果

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM