You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 12:12:03