TextInput и canvas

Есть функция для проверки валидности номера телефона, которая по нажатию кнопки должна добавить к text input'у красные рамки, если номер не валиден. Функция работает, но, если text input выбран т.е. в фокусе, то после первого нажатия text input просто убирается из фокуса, и только после второго нажатия появляется рамка. Как исправить?

    def check_num(self, num, t: TextInput):
    pattern = re.compile(r'^\+79\d{9}$')
    match = pattern.match(num)
    if match:
        self.send_code(match.group())
    else:
        with t.canvas:
            Color(1, 0, 0, 1)
            Line(points=[t.x, t.y, t.x, t.top, t.right, t.top, t.right, t.y], width=1.1, cap='square', close=True)

Код .kv файла:

TextInput:
    id: num
    hint_text: '+7XXXXXXXXXX'
    size_hint_y: None
    height: self.minimum_height
    on_text: self.canvas.clear()
Button:
    text: 'Отправить код'
    width: self.parent.width * .5
    height: self.parent.height * .8
    size_hint: None, None
    on_release: root.check_num(num.text, num)

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