Я пытаюсь сделать ввод текста, который принимает только значения с плавающей запятой. Кроме того, введенное значение должно находиться между двумя значениями.
Я создал класс, содержащий метод проверки. Если значение не находится между двумя значениями, отображается всплывающее окно.
Но у меня есть проблема. Метод вызывается только тогда, когда пользователь нажимает «Enter». Я пробовал вызывать метод при изменении текста, но это раздражает пользователя, потому что всплывающее окно появляется все время, пока пользователь вводит данные.
Есть ли другой подход, чтобы сделать что-то подобное?
Файл Python:
class BoundedInput(BoxLayout):
value = NumericProperty()
def validate(self, min_value, max_value):
status = min_value <= self.value <= max_value
if not status:
message = f'Value must be between {min_value} and {max_value}'
popup = Popup(title='Warning', content=Label(text=message),
size_hint=(None, None), size=(300, 200))
popup.open()
Kv-файл:
<NumericInput@TextInput>:
input_filter: 'float'
multiline: False
<BoundedInput>:
orientation: 'horizontal'
Label:
text: 'Value'
NumericInput:
text: str(root.value)
on_text_validate:
root.value = float(self.text)
root.validate(5, 100)