Kivy如何打印循环生成的TextInput内容及解决按钮触发报错问题
报错原因
Kivy 中on_press绑定的回调函数触发时,会自动将被点击的按钮实例作为额外参数传入。你定义的p()方法仅声明了self一个入参,运行时接收了两个参数(self+按钮实例),因此触发参数数量不匹配的报错。
修复方案
1. 核心修正点
给p()方法增加占位参数接收多余传入值,同时过滤输入框内容打印,适配动态增减的输入框场景:
# 原错误写法 def p(self):print(self.return_list) # 修正后写法 def p(self, *_): # 自动过滤列表内的输入框组件,提取用户输入的文本 input_values = [widget.text for widget in self.return_list if isinstance(widget, TextInput)] print(input_values)
后续动态新增的输入框只要统一加入self.return_list,不需要修改打印逻辑就能自动识别。
2. 完整可运行代码
from kivy.uix.textinput import TextInput from kivy.app import App from kivy.uix.button import Button from kivy.lang.builder import Builder kv=Builder.load_string(''' ScrollView: GridLayout: id:inputs cols:1 row_force_default:True row_default_height:30 size_hint_y:None height:self.minimum_height ''') class Accounting(App): def build(self):return kv def on_start(self): self.return_list = [] # 存储所有组件,自动适配动态增减的输入框 w = Button(text='打印所有输入框内容',on_press=self.p) self.return_list.append(w) self.root.ids.inputs.add_widget(w) # 初始生成5个输入框,可根据需求调整数量或动态增删 for i in range(5): w = TextInput() self.return_list.append(w) self.root.ids.inputs.add_widget(w) return self.return_list def p(self, *_): input_content = [w.text for w in self.return_list if isinstance(w, TextInput)] print("所有输入框内容:", input_content) Accounting().run()
内容的提问来源于stack exchange,提问作者user16271811
相关产品推荐
相关产品推荐

