1. Введение в Flet: установка, настройка окружения и структура приложения
Введение в Flet: установка, настройка окружения и структура приложения
Flet — это фреймворк, который позволяет создавать интерактивные многопользовательские веб-приложения, десктопные и мобильные приложения, используя только язык Python. Главная особенность Flet заключается в том, что он избавляет разработчика от необходимости писать frontend-код на HTML, CSS и JavaScript. Вместо этого вы оперируете объектами Python, а Flet транслирует их в визуальные компоненты на базе Flutter (UI-toolkit от Google).
Для Python-разработчика со знанием объектно-ориентированного программирования (ООП) переход на Flet будет интуитивным: интерфейс строится как дерево объектов, где каждый элемент (кнопка, текст, контейнер) является экземпляром класса.
Установка и настройка окружения
Для работы с Flet требуется Python версии 3.7 или выше. Рекомендуется использовать виртуальное окружение для изоляции зависимостей проекта.
Создание виртуального окружения
Создайте папку для вашего проекта и выполните следующие команды в терминале:
Для Windows:
Для macOS/Linux:
Установка библиотеки
После активации виртуального окружения установите Flet с помощью менеджера пакетов pip:
Эта команда установит все необходимые зависимости, включая встроенный веб-сервер для локальной разработки.
Базовая структура приложения
Минимальное приложение на Flet состоит из трех основных частей:
main, которая является точкой входа и принимает объект страницы.ft.app.Рассмотрим код простейшего приложения:
Разбор компонентов
* import flet as ft: Общепринятый стандарт импорта. Все классы и функции библиотеки будут доступны через префикс ft.
* ft.Page: Это холст вашего приложения. Объект page представляет собой окно браузера (в веб-версии) или окно программы (в десктоп-версии). Он хранит состояние интерфейса и список отображаемых элементов.
* ft.Text: Это контрол (виджет). В Flet все элементы интерфейса называются контролами. Это классы, которые имеют свойства (цвет, размер, текст) и методы.
* page.add(): Метод, который помещает контрол в список отображения страницы. Важно понимать, что создание объекта ft.Text не отображает его автоматически — его нужно явно добавить на страницу.
* ft.app(target=main): Запускает цикл событий приложения. Аргумент target указывает на функцию, которая будет выполнена при старте.
Дерево контролов и компоновка
Поскольку вы не используете HTML, структура страницы определяется вложенностью объектов Python. Чтобы расположить элементы не просто друг под другом, а в определенном порядке, используются контейнеры компоновки: Row (строка) и Column (колонка).
Row и Column
* Column: Выстраивает дочерние элементы вертикально (сверху вниз). * Row: Выстраивает дочерние элементы горизонтально (слева направо).
Пример использования:
Свойство controls принимает список list объектов, которые должны находиться внутри контейнера. Это похоже на вложенность тегов <div> в HTML, но реализовано через списки Python.
Интерактивность и обновление состояния
Одна из самых частых ошибок новичков в Flet — забыть обновить страницу или контрол после изменения данных. Flet не отслеживает изменения переменных Python автоматически. Вы должны явно сообщить фреймворку, что состояние изменилось.
Для этого используется метод .update().
Пример счетчика нажатий
Рассмотрим пример, где мы используем ООП подход и обработку событий.
В этом примере:
minus_click и plus_click. Они принимают аргумент e (событие), который содержит информацию о клике.on_click.value текстового поля.txt_number.update(), чтобы перерисовать только текстовое поле с новым значением.> Вызов page.update() перерисовывает всю страницу целиком. Для производительности лучше вызывать .update() у конкретных измененных контролов, когда это возможно.
Запуск в режиме веб-приложения
По умолчанию ft.app(target=main) запускает приложение в нативном окне операционной системы. Чтобы увидеть, как оно будет выглядеть в браузере (как веб-сайт), нужно изменить параметры запуска:
При запуске скрипта Flet поднимет локальный веб-сервер и автоматически откроет ваш браузер по умолчанию.
Итоги
* Flet позволяет писать интерфейсы на чистом Python, используя дерево объектов (контролов).
* Основной структурной единицей является ft.Page, на которую добавляются контролы с помощью метода page.add().
* Для компоновки элементов используются контейнеры Row (строка) и Column (колонка).
* Изменения в свойствах объектов не отображаются мгновенно; необходимо вызывать метод .update() для перерисовки элемента или страницы.
* Приложение может быть запущено как десктопная программа или как веб-сайт путем изменения параметра view в функции ft.app.