我是kivy模块的初学者。我想在屏幕上放置8个文本框以获取用户输入,然后将这些输入保存在列表中以便以后使用!
我在互联网上进行搜索,但没有发现任何有用的东西。
我想我应该像这样的代码: Save text input to a variable in a kivy app
但是不想在shell
中显示输入,我想将它们保存在列表中!
答案 0 :(得分:1)
您需要给文本输入id
,然后引用其中的id
,并使用.text
来获取文本。 TestApp类中的self.root
指kv文件的根小部件,该根小部件周围没有括号(< >
),在本例中为GridLayout
。 / p>
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()
答案 1 :(得分:1)
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
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()
#: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()