Обязательное поле для заполнения в Kivy

Подскажите пожалуйста, можно ли как то при использовании библиотеки KivyMD сделать поле MDTextField обязательным для заполнения? Так чтобы если пользователь не заполнил поле, то приложение бы не ломалось, а выделялось поле или как то сообщалось, что поле нужно заполнить.

В документации ничего не нашел по этому поводу.

Вот мой код

.py

from kivy.lang import Builder

from kivymd.app import MDApp
from kivy.core.window import Window

from kivy.config import Config
from kivy.uix.screenmanager import Screen


#indow.size = (720, 1280)
Window.size = (480, 853)

Config.set('kivy', 'keyboard_mode', 'systemanddock')



class Container(Screen):

    def calculate(self):
        self.calculate_mileage()
        self.calculate_consumption_norm()
        self.calculate_remaining_fuel()

def calculate_mileage(self):
    if self.mileage_after.text == '':
        self.mileage.text = 'Заполните поле "Пробег при заезде"'
    elif self.mileage_before.text == '':
        self.mileage.text = 'Заполните поле "Пробег при выезде"'
    else:
        self.mileage.text = str(int(self.mileage_after.text) - int(self.mileage_before.text)) # Пробег

def calculate_consumption_norm(self):
    if self.mileage.text == 'Проверьте поле "Пробег при заезде"' or 'Проверьте поле "Пробег при выезде"':
        self.consumption_norm.text = 'Что-то не так с пробегом'
    else:
        mileage = float(self.mileage.text)
        if self.consumption_per_100_km.text == '':
            self.consumption_norm.text = 'Заполните поле "Расход на 100 км"'
        else:
            consumption_per_100_km = float(self.consumption_per_100_km.text)
            if self.engine_hours.text == '':
                self.engine_hours.text = '0'
            engine_hours = float(self.engine_hours.text)
            if self.consumption.text =='':
                self.consumption.text = '0'
            consumption = float(self.consumption.text)
            consumption_norm = round((((mileage * consumption_per_100_km) / 100) + (engine_hours * consumption)), 3)
            self.consumption_norm.text = str(consumption_norm) # Остаток по норме

def calculate_remaining_fuel(self):
    if self.fuel_before.text == '':
        self.remaining_fuel.text = 'Заполните поле "Топливо до выезда"'
    else:
        fuel_before = float(self.fuel_before.text)
        if self.refill.text == '':
            self.refill.text = '0'
        refill = float(self.refill.text)
        if self.consumption_norm.text == 'Заполните поле "Расход на 100 км"' or 'Что-то не так с пробегом':
            self.remaining_fuel.text = 'Что-то не так с расходом'
        else:
            remaining_fuel = fuel_before - float(self.consumption_norm.text) + refill
            self.remaining_fuel.text = str(remaining_fuel) # Остаток топлива

class TestApp(MDApp):
    def build(self):
        return Container()


TestApp().run()

.kv

<Container>:

mileage_before: mileage_before
mileage_after: mileage_after
fuel_before: fuel_before
engine_hours: engine_hours
refill: refill
consumption_per_100_km: consumption_per_100_km
consumption: consumption
mileage: mileage
consumption_norm: consumption_norm
remaining_fuel: remaining_fuel

MDBoxLayout:
    orientation: 'vertical'

    MDGridLayout:
        cols: 2
        padding: (15, 5, 15, 10)
        spacing: 50

        MDTextField:
            id: mileage_before
            hint_text: 'Пробег при выезде'
            input_type: 'number'
            input_filter: 'int'

        MDTextField:
            id: mileage_after
            hint_text: 'Пробег при заезде'
            input_type: 'number'
            input_filter: 'int'

        MDTextField:
            id: fuel_before
            hint_text: 'Топливо до выезда'
            input_type: 'number'
            input_filter: 'float'

        MDTextField:
            id: consumption
            hint_text: 'Расход Л/Ч'
            input_type: 'number'
            input_filter: 'float'

        MDTextField:
            id: refill
            hint_text: 'Выдано топлива'
            input_type: 'number'
            input_filter: 'float'

        MDTextField:
            id: consumption_per_100_km
            hint_text: 'расход на 100 км'
            input_type: 'number'
            input_filter: 'float'

        MDTextField:
            id: engine_hours
            hint_text: 'Моточасы'
            input_type: 'number'
            input_filter: 'int'

    MDGridLayout:
        cols: 2

        MDBoxLayout:
            orientation: 'vertical'
            padding: (15, 0, 0, 0)

            MDLabel:
                text: 'Пробег'

            MDLabel:
                text: 'Расход по норме'

            MDLabel:
                text: 'Остаток топлива'

        MDBoxLayout:
            orientation: 'vertical'
            padding: (0, 0, 0, 0)

            MDLabel:
                id: mileage
                text: '0'

            MDLabel:
                id: consumption_norm
                text: '0'

            MDLabel:
                id: remaining_fuel
                text: '0'

    MDBoxLayout:
        orientation: 'vertical'
        padding: (35, 0, 0, 10)
        size_hint: (.9, .3)

        MDFillRoundFlatButton:
            text: "ПОСЧИТАТЬ"
            pos_hint: {"center_x": .5, "center_y": .5}
            font_size: 30
            size_hint: (.9, .3)

            on_release:
                root.calculate()

в итоге в приложении считает только пробег, а в остальных полях (Расход по норме и Остаток топлива) пишется ошибка Что-то не так с пробегом и Что-то не так с расходом


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