Обязательное поле для заполнения в 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()
в итоге в приложении считает только пробег, а в остальных полях (Расход по норме и Остаток топлива) пишется ошибка Что-то не так с пробегом и Что-то не так с расходом