python - kivy:小部件中字符之间的精确焦点放置光标
问题描述
如何更改字符之间的光标焦点?我的小部件添加/
以帮助编写日期,但光标焦点停留在/
我添加的字符后面。我想在角色之后推进这个。
最有价值球员:
from kivy.app import App
from kivy.uix.textinput import TextInput
def on_text(instance, value):
if len(value) == 2:
if value[:2].isdigit():
instance.text += "/"
if len(value) == 5:
if value[3:5].isdigit():
instance.text += "/"
print('The widget', instance, 'have:', value)
class MyApp(App):
def build(self):
text_input = TextInput()
text_input.bind(text=on_text)
return text_input
MyApp().run()
解决方案
insert_text()
一种更简洁的方法是覆盖TextInput
. 这是执行此操作的代码的修改版本:
from kivy.app import App
from kivy.uix.textinput import TextInput
class MyTextInput(TextInput):
def insert_text(self, substring, from_undo=False):
value = self.text + substring
if len(value) == 2:
if value[:2].isdigit():
substring += "/"
if len(value) == 5:
if value[3:5].isdigit():
substring += "/"
return super(MyTextInput, self).insert_text(substring, from_undo=from_undo)
class MyApp(App):
def build(self):
text_input = MyTextInput()
# text_input.bind(text=on_text)
return text_input
MyApp().run()
请注意,使用on_text()
方法修改text
结果会导致额外的调用,on_text()
并且很容易导致无限循环。
推荐阅读
- c# - 对象类型 System.windows.controls.ComboBox 不存在映射
- c# - 容器中的 RemoteIpAddress
- windows - 如何使用 Windbg 从程序开始进行调试?
- c# - 为什么当我将浮点数更改为 1 时它显示错误 CS0029
- python - 如何安装 cx_freeze 以将 Python 3.10 脚本转换为可执行文件?
- python - Pandas:创建新列并根据字符串列中的值(子字符串)和另一列中的值添加值
- java - Tomcat:如何使用 Spring Boot 和 Thymeleaf 处理 SizeLimitExceededException
- ruby-on-rails - CarrierWave config.enable_processing = false 在 Rspec 的测试模式下不起作用
- vue.js - 未找到材料设计图标字体
- azure-devops - 在 docker build 在 Azure Devops CI/CD 管道中注入 Vault Secrets