Подсчет количества символов в TextInput

Если я в TextInput ввожу цифры, а потом их сразу или по одной удаляю, то TextInput не становиться пустой строкой и не показывает количество символов равным 0.

Как при удалении последнего символа (или всех сразу) получить длину строки 0?

from kivy.app import App
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout

class MainApp(App):
    def build(self):
        bl = BoxLayout(orientation = 'vertical')
        self.txt = TextInput()
        self.txt.bind(text=self.on_focusa)
        bl.add_widget(self.txt)
        self.lab = Label()
        bl.add_widget(self.lab)

        return bl

    def on_focusa(self, instance, value):
        try:
            txt = int(self.txt.text)*2
            self.lab.text = str(txt)
            print(len(str(txt)))
        except ValueError:
            pass
if __name__ == '__main__':
    MainApp().run()

Ответы (1 шт):

Автор решения: sigalgleb

Проблема в том, что когда вы удаляете все знаки из текстового поля, то значение value не приходит в on_focusa, функция не отрабатывает так, как вам бы хотелось.

Такой код может решить проблему, его можно оптимизировать если вынести повторяющийся код в отдельную функцию:

    def on_focusa(self, instance, value):
    if value: # Проверяем значение value
        try:
            txt = int(self.txt.text)*2
            self.lab.text = str(txt)
            print(len(str(txt)))
        except ValueError:
            pass
    else: # Если value отсутствует, то выводим нули
        txt = 0
        self.lab.text = str(txt)
        print(len(str(txt)))
→ Ссылка