Интерфейс строится как дерево виджетов
Экран состоит из контейнеров и элементов: панелей, кнопок, полей, списков. Родительский виджет отвечает за размещение дочерних согласно выбранному layout. Если пытаться задавать все координаты вручную, интерфейс быстро ломается на другом размере окна. Лучше использовать относительные размеры, отступы и контейнеры, которые умеют перераспределять пространство.
KV-разметка отделяет внешний вид от Python-кода
KV-язык позволяет описывать структуру интерфейса и связывать свойства декларативно. Python остаётся удобным местом для бизнес-логики, работы с данными и сложных обработчиков. Такое разделение не обязательно в крошечном примере, но быстро окупается при нескольких экранах. Код становится проще читать, потому что создание каждой кнопки не смешано с логикой приложения.
События связывают действие пользователя с логикой
Кнопка вызывает обработчик нажатия, текстовое поле сообщает об изменении, экран реагирует на вход и выход. Обработчик должен делать понятную работу, а не знать весь интерфейс сразу. Например, функция добавляет запись в модель данных, после чего интерфейс обновляет список. Это легче тестировать, чем функция, которая одновременно читает поле, меняет десять виджетов и сохраняет файл.
Несколько экранов требуют управления состоянием
ScreenManager помогает переключать страницы приложения, но данные между ними лучше хранить отдельно от конкретного экрана. Тогда переход не уничтожает смысл состояния и экраны не начинают напрямую управлять друг другом. Для небольшого проекта достаточно простого объекта или набора свойств, а более сложная архитектура появляется по мере роста требований.
Попробуйте на практике
Собрать маленькое приложение списка задач с двумя экранами.
- Создайте главный экран со списком и кнопкой добавления.
- Сделайте второй экран с полем ввода и кнопкой сохранения.
- Опишите основную разметку в KV, а обработку данных оставьте в Python.
- Храните список задач отдельно от отдельных кнопок интерфейса.
- После сохранения возвращайтесь на главный экран и обновляйте отображение.
Как проверить результат. Проект выполнен хорошо, если данные не зависят от существования конкретного виджета, а интерфейс и обработчики можно понять отдельно.
Частые вопросы
KivyMD заменяет Kivy?
Нет. KivyMD расширяет Kivy набором компонентов и стилистикой Material Design.
Можно ли писать интерфейс только на Python?
Да, но KV-разметка часто делает структуру экранов более читаемой.
Почему приложение выглядит по-разному на разных экранах?
Абсолютные размеры и координаты плохо адаптируются. Используйте layout-контейнеры и относительные правила размещения.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.