如何在Python/Kivy应用中打印循环添加的所有TextInput值?
获取Kivy中动态添加的TextInput输入值
这里提供两种实用的方法来获取所有动态添加的TextInput的输入值:
方法一:遍历布局子组件筛选TextInput
直接在按钮回调里遍历布局的子组件,筛选出TextInput类型的实例并读取其text属性。注意children属性的顺序是反向的(后添加的组件排在最前面),如果需要和创建顺序一致,用reversed()反转即可。
修改后的完整代码:
from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.textinput import TextInput from kivy.uix.button import Button class app(App): def build(self): self.box = BoxLayout(orientation='vertical') for n in range(5): self.box.add_widget(TextInput()) def doet(instance): print('values: ') # 按创建顺序输出所有TextInput的值 for widget in reversed(self.box.children): if isinstance(widget, TextInput): print(widget.text) self.box.add_widget(Button(text='DOET', on_press=doet)) return self.box app().run()
方法二:创建时保存TextInput到列表
在循环创建TextInput时,把每个实例存入一个类属性列表,后续直接遍历这个列表就能获取值,无需类型判断,效率更高,顺序也完全和创建时一致。
修改后的完整代码:
from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.textinput import TextInput from kivy.uix.button import Button class app(App): def build(self): self.box = BoxLayout(orientation='vertical') self.inputs = [] # 存储所有TextInput实例 for n in range(5): ti = TextInput() self.inputs.append(ti) self.box.add_widget(ti) def doet(instance): print('values: ') # 遍历列表输出所有值 for ti in self.inputs: print(ti.text) self.box.add_widget(Button(text='DOET', on_press=doet)) return self.box app().run()
内容的提问来源于stack exchange,提问作者Tommy
相关产品推荐
相关产品推荐

