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

如何获取Kivy TextInput组件中用户编辑后的文本?当前仅能获取初始文本

问题原因

你遇到的问题核心是绑定按钮时过早固定了TextInput的文本值:当用partial(self.SaveOrder2, order = self.box.text)创建回调函数时,self.box.text在这行代码执行时就被赋值为初始文本,后续用户编辑的内容不会更新这个参数。另外代码里还有个拼写错误:on_relase应该是on_release,这会导致按钮点击事件根本触发不了。

修复方案

有两种简单的修复方式:

方式1:在回调方法中直接获取最新文本

不需要在partial里传文本,而是在SaveOrder2方法里直接读取self.box.text,这样拿到的就是点击按钮时的最新内容:

def view(self, *args, **kwargs):
    print(args)
    print(kwargs)
    print(type(self))
    self.box = TextInput(text = self.read(),size_hint= (.6, .56), pos_hint= {"center_x":.5,"center_y":.51})
    self.add_widget(self.box)

    send_button = Button(size_hint_y = (.05), size_hint_x = (.44), pos_hint= {"center_y":.18, "center_x":.5})
    # 直接绑定方法,不传text参数
    send_button.bind(on_release = self.SaveOrder2)
    self.add_widget(send_button) 

# 修改SaveOrder2方法
def SaveOrder2(self, instance):
    # 这里获取的就是用户编辑后的最新文本
    current_text = self.box.text
    print(current_text)
    # 后续保存逻辑...

方式2:通过partial传递TextInput组件本身

如果需要给SaveOrder2传更多参数,可以把整个TextInput组件传进去,再在方法里取文本:

def view(self, *args, **kwargs):
    print(args)
    print(kwargs)
    print(type(self))
    self.box = TextInput(text = self.read(),size_hint= (.6, .56), pos_hint= {"center_x":.5,"center_y":.51})
    self.add_widget(self.box)

    send_button = Button(size_hint_y = (.05), size_hint_x = (.44), pos_hint= {"center_y":.18, "center_x":.5})
    # 传递整个TextInput组件
    fun = partial(self.SaveOrder2, input_box=self.box)
    send_button.bind(on_release = fun)
    self.add_widget(send_button) 

# 修改SaveOrder2方法
def SaveOrder2(self, instance, input_box):
    current_text = input_box.text
    print(current_text)
    # 后续保存逻辑...
关键注意点
  • 务必修正拼写错误:on_relase → on_release,否则按钮点击事件不会触发
  • 不要在绑定事件时提前获取text值,要在事件触发时再获取,才能拿到用户编辑后的内容

内容的提问来源于stack exchange,提问作者z3nox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:20:32