如何从用户那里获取输入并将它们保存在列表中(Python Kivy)?

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

我是 kivy 模块的初学者。我想在屏幕上放置 8 个文本框以获取用户的输入,然后将这些输入保存在列表中以便以后使用!

我在互联网上搜索但没有找到任何有用的东西。

我想我应该像下面的代码那样做某事:

但不想在 shell 中显示输入,我想将它们保存在列表中!

您需要输入文本 id,然后引用其中的 id 并使用 .text 获取文本。 TestApp class 中的 self.root 指的是您的 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()

Py文件

  • 使用 for 循环遍历所有小部件的容器,例如TextInput.

片段

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

kv文件

  • 使用容器,例如GridLayout
  • 为容器添加一个id
  • 将所有 LabelTextInput 小部件添加为 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()

输出