Подсчет количества символов в 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)))