首页 > 解决方案 > 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()

标签: pythonkivy

解决方案


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()并且很容易导致无限循环。


推荐阅读