Kivy实现回车键提交表单:从最后一个TextInput跳转至Button并触发函数
嘿,这个需求其实很好实现,咱们通过Kivy的焦点管理和控件事件就能搞定。我先把你没写完的测试代码补全,再一步步改成你要的效果:
完整实现代码
from kivy.uix.screenmanager import Screen from kivy.app import App from kivy.core.window import Window from kivy.lang import Builder Window.clearcolor = (0.5, 0.5, 0.5, 1) Window.size = (300, 100) # 直接内嵌KV布局,也可以单独写KV文件 Builder.load_string(''' <User>: BoxLayout: orientation: 'horizontal' padding: 10 spacing: 10 TextInput: id: ti1 text_validate_unfocus: False # 回车时切换到第二个输入框 on_text_validate: ti2.focus = True TextInput: id: ti2 text_validate_unfocus: False # 最后一个输入框回车,把焦点移到按钮上 on_text_validate: btn.focus = True Button: id: btn text: '触发' focusable: True # 必须开启这个,按钮才能获取焦点 # 绑定点击事件,焦点在按钮上时按回车会自动触发这个 on_press: root.abc() ''') class User(Screen): def abc(self): print('Test') class Test(App): def build(self): return User() if __name__ == '__main__': Test().run()
关键逻辑说明
- 输入框切换焦点:给每个
TextInput设置text_validate_unfocus: False,这样按下回车后输入框不会自动失去焦点,我们可以手动指定下一个控件的focus = True来完成切换。 - 跳转到按钮:最后一个
TextInput的on_text_validate事件里,把焦点赋值给按钮btn.focus = True。 - 回车触发按钮事件:默认按钮是不能获取焦点的,所以要给按钮加上
focusable: True;当按钮获得焦点时,按下回车键会自动触发它的on_press事件,也就是调用你的root.abc()方法了。
如果你的布局是在Python代码里动态创建的,逻辑也是一样的:给最后一个输入框绑定on_text_validate事件,设置按钮的焦点,同时确保按钮开启focusable并绑定好点击方法就行。
内容的提问来源于stack exchange,提问作者macson taylor
相关产品推荐
相关产品推荐

