如何在按下回车键时获取MDTextField输入并添加到滚动列表展示
问题排查及修复方案
现有代码核心问题
- 事件绑定错误:KV文件中
MDTextField当前绑定的on_text事件会在每次输入字符时触发,你需要的是按下回车键触发的on_text_validate事件,且绑定方法需要加括号才会执行调用 - Python代码缩进错误:
INSPECTOR类下的所有方法没有正确缩进,属于基础语法错误 - 输入内容获取时机错误:仅在
on_start阶段获取一次空的输入框内容,后续输入的内容不会同步更新 - 循环逻辑错误:
range(self.list)参数类型错误,range需要接收整数参数,且无需每次触发都遍历所有历史内容添加,会导致列表重复渲染 - 变量命名不规范:使用Python内置关键字
list作为变量名,存在命名冲突风险 - KV布局结构错误:
Screen下的子部件没有正确缩进,会导致布局层级错误
修复后完整代码
main.py
from kivymd.app import MDApp from kivy.lang import Builder from kivy.core.window import Window from kivymd.uix.list import OneLineListItem Window.size = (480,800) class INSPECTOR(MDApp): def build(self): self.theme_cls.primary_palette = "Green" screen = Builder.load_file('layout.kv') return screen def on_start(self): # 初始化存储输入内容的列表 self.record_list = [] def on_enter(self): # 实时获取当前输入框内容,去除首尾空白字符 current_input = self.root.ids.barcode.text.strip() # 非空校验,避免添加空内容 if not current_input: return # 内容存入列表 self.record_list.append(current_input) # 添加到滚动列表中展示 self.root.ids.contaniner.add_widget(OneLineListItem(text=current_input)) # 清空输入框,方便下一次输入 self.root.ids.barcode.text = "" if __name__ == "__main__": INSPECTOR().run()
layout.kv
Screen: BoxLayout: orientation: 'vertical' MDToolbar: title: 'INSPECTOR' elevation:5 MDTextField: id: barcode hint_text: "Scan" mode: "rectangle" icon_right:'barcode-scan' focus: True size_hint_x: None size_hint_y: None pos_hint: {'center_x':0.5,'center_y':0.6} width: 400 required: True helper_text_mode: "on_error" helper_text: "Enter text" # 绑定回车键触发事件 on_text_validate: app.on_enter() GridLayout: padding:50 cols:1 ScrollView: MDList: id: contaniner
功能说明
修改后按下回车键即可自动触发内容添加逻辑,非空内容会自动存入列表同时展示在下方滚动区域,输入框会自动清空等待下一次输入。
内容的提问来源于stack exchange,提问作者Ahmed Atef
相关产品推荐
相关产品推荐

