如何获取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
相关产品推荐
相关产品推荐

