Загрузка...

Flet - что это такое и с чем это едят. Обзор фреймворка

Тема в разделе Python создана пользователем dolezha 8 июл 2023. (поднята 4 июн 2025 в 19:27) 1851 просмотр

Загрузка...
Опрос

Была ли для вас статья полезной?

Результаты будут видны только после голосования.
  1. Да, спасибо

  2. Нет, неинформативная

  3. Для новичков - очень даже, но я все знаю!

  1. dolezha
    dolezha Автор темы 8 июл 2023 Python-разработчик: lolz.live/threads/7201971 49 17 ноя 2021
    Всех приветствую! Данная статья - первая про фреймворк Flet на zelenka.guru. Я решил написать эту статью, тк не увидел нигде в интернете хороших гайдов с комментариями, тем более на русском. Мой единственный источник - оф. документация. Давайте начнем:
    Часть 1. Flet - что это?
    Flet — фреймворк, предоставляющий Flutter компоненты для разработки кроссплатформенных интерактивных веб-приложений. Для начала работы с фреймворком необходимо установить его: pip install flet. В течение статьи я буду объяснять вам как же работает этот фреймворк и заодно писать на нем код. К концу статьи мы будем иметь небольшую рабочую программу. Но сейчас немного теории:​

    • Данный фреймворк не требует знания веб-технологий, таких как HTTP, HTML, CSS или JavaScript.
    • Пользовательский интерфейс создается с использованием виджетов Flutter.
    • Приложение может быть запущено как настольное или веб-приложение.
    • Flet предоставляет многие базовые виджеты для создания приложения.


    Часть 2. Практика. Форма регистрации

    Начнем создание нашего приложения. Для начала создадим самый базовый (необходимый) шаблон:

    Python

    import flet as ft

    def main(page: ft.Page):
    pass

    ft.app(target=main)
    Данное приложение будет открываться как отдельное окно, но Flet можно открыть в новом окне браузера, заменив последнюю строчку кода на эту: ft.app(target=main, view=ft.AppView.WEB_BROWSER). В данный момент наше приложение пустое (если точнее, то с бесконечной загрузкой). Сразу хочу отметить, что мы будем делать очень простую и при этом интересную программу, для полного функционирования которой, потребуется включить работы с базой данных — это форма регистрации.

    Давайте добавим в нашу программу формы для заполнения - делается это очень просто:
    Python
    page.add(
    ft.Row(controls=[
    ft.TextField(label="Надпись в текстовом поле"),
    ft.ElevatedButton(text="Текст кнопки")
    ])
    )
    Но! Нам необходимо 3 таких формы, поэтому мы сделаем все намного проще и заодно добавим обработчик нажатия кнопки, приветствие пользователя и объединенную кнопку:
    Python
    import flet as ft


    def main(page):

    # Создаем "объекты"
    first_name = ft.Ref[ft.TextField]()
    last_name = ft.Ref[ft.TextField]()
    patronymic = ft.Ref[ft.TextField]()
    greetings = ft.Ref[ft.Column]()

    # Обработчик нажатия кнопки
    def btn_click(e):
    greetings.current.controls.append(
    ft.Text(f"Добро пожаловать, {first_name.current.value} {patronymic.current.value} {last_name.current.value}!")
    ) # Когда кнопка нажата, мы здороваемся с пользователем по заданным данным

    # Очищаем все данные, введенные пользователем
    first_name.current.value = ""
    last_name.current.value = ""
    patronymic.current.value = ""
    page.update() # Обязательно "сохраняем" изменения на странице

    page.add(
    # Создаем текстовые поля, для удобства ставим автофокус на первое поле
    ft.TextField(ref=first_name, label="Ваше имя", autofocus=True),
    ft.TextField(ref=last_name, label="Ваша фамилия"),
    ft.TextField(ref=patronymic, label="Ваше отчество"),
    # Создаем кнопку, обработчиком которой будет функция, указанная в on_click
    ft.ElevatedButton("Зарегистрироваться", on_click=btn_click),
    ft.Column(ref=greetings),
    )

    ft.app(target=main)
    [IMG] [IMG]

    Обязательно читайте комментарии в коде - я специально их пишу, чтобы вы понимали, что я делаю — именно это и есть теоретическая часть темы. Давайте теперь добавим немного визуальной части: размеры окна, текст, тема:

    Python
    page.window_width = 400 # Задаем ширину окна
    page.window_height = 400 # Задаем высоту окна
    page.window_resizable = False # Запрещаем изменять размеры окна
    page.update()
    Python
    page.add(
    ft.Text("Форма регистрации.", size=25, weight=ft.FontWeight.BOLD,), # Создаем текст, задаем размер, делаем его толстым
    )
    Python
    page.theme = theme.Theme(color_scheme_seed='green') # Задаем зеленую тему
    page.update() # Обязательно "сохраняем" изменения на странице

    Вот, что получилось в итоге всех изменений:

    Python
    import flet as ft
    from flet import theme

    def main(page):
    page.window_width = 400 # Задаем ширину окна
    page.window_height = 400 # Задаем высоту окна
    page.window_resizable = False # Запрещаем изменять размеры окна
    page.update()

    # Создаем "объекты"
    first_name = ft.Ref[ft.TextField]()
    last_name = ft.Ref[ft.TextField]()
    patronymic = ft.Ref[ft.TextField]()
    greetings = ft.Ref[ft.Column]()

    # Обработчик нажатия кнопки
    def btn_click(e):
    greetings.current.controls.append(
    ft.Text(f"Добро пожаловать, {first_name.current.value} {patronymic.current.value} {last_name.current.value}!")
    ) # Когда кнопка нажата, мы здороваемся с пользователем по заданным данным
    # Вы можете делать с данными, которые получили что хотите - вносить их в базы данных и тд.

    # Очищаем все данные, введенные пользователем
    first_name.current.value = ""
    last_name.current.value = ""
    patronymic.current.value = ""
    page.update() # Обязательно "сохраняем" изменения на странице

    page.add(
    ft.Text("Форма регистрации.", size=25, weight=ft.FontWeight.BOLD,), # Создаем текст, задаем размер, делаем его толстым
    # Создаем текстовые поля, для удобства ставим автофокус на первое поле
    ft.TextField(ref=first_name, label="Ваше имя", autofocus=True),
    ft.TextField(ref=last_name, label="Ваша фамилия"),
    ft.TextField(ref=patronymic, label="Ваше отчество"),
    # Создаем кнопку, обработчиком которой будет функция, указанная в on_click
    ft.ElevatedButton("Зарегистрироваться", on_click=btn_click),
    ft.Column(ref=greetings),
    )

    page.theme = theme.Theme(color_scheme_seed='green') # Задаем зеленую тему
    page.update() # Обязательно "сохраняем" изменения на странице
    [IMG] [IMG]



    Наше приложение заметно изменилось - в нем появилось приятное оформление и небольшой функционал. Давайте добавим поле с вводом почты - к нему мы добавим характерный смайлик письма:
    Python
    import flet as ft
    from flet import theme

    def main(page):
    page.window_width = 450 # Задаем ширину окна
    page.window_height = 470 # Задаем высоту окна
    page.window_resizable = False # Запрещаем изменять размеры окна
    page.update()

    # Создаем "объекты"
    first_name = ft.Ref[ft.TextField]()
    last_name = ft.Ref[ft.TextField]()
    patronymic = ft.Ref[ft.TextField]()
    email = ft.Ref[ft.Column]()
    greetings = ft.Ref[ft.Column]()


    # Обработчик нажатия кнопки
    def btn_click(e):
    greetings.current.controls.append(
    ft.Text(f"Добро пожаловать, {first_name.current.value} {patronymic.current.value} {last_name.current.value}!")
    ) # Когда кнопка нажата, мы здороваемся с пользователем по заданным данным
    # Вы можете делать с данными, которые получили что хотите - вносить их в базы данных и тд.

    # Очищаем все данные, введенные пользователем
    first_name.current.value = ""
    last_name.current.value = ""
    patronymic.current.value = ""
    email.current.value = ""
    page.update() # Обязательно "сохраняем" изменения на странице

    page.add(
    ft.Text("Форма регистрации.", size=25, weight=ft.FontWeight.BOLD,), # Создаем текст, задаем размер, делаем его толстым
    # Создаем текстовые поля, для удобства ставим автофокус на первое поле
    ft.TextField(ref=first_name, label="Ваше имя", autofocus=True),
    ft.TextField(ref=last_name, label="Ваша фамилия"),
    ft.TextField(ref=patronymic, label="Ваше отчество"),
    ft.TextField(ref=email, label="Адрес электронной почты", icon=ft.icons.EMAIL), # Спец.параметр icon
    # Создаем кнопку, обработчиком которой будет функция, указанная в on_click
    ft.ElevatedButton("Зарегистрироваться", on_click=btn_click),
    ft.Column(ref=greetings),
    )

    page.theme = theme.Theme(color_scheme_seed='green') # Задаем зеленую тему
    page.update() # Обязательно "сохраняем" изменения на странице

    ft.app(target=main)
    [IMG] [IMG]

    Часть 3. Выводы.

    Данная статья была обозревательной - у фреймворка есть еще куча возможностей, о которых я не сказал. Надеюсь вам понравилась статья - она полностью авторская, я очень старался сделать что-то интересное и полезное. Спасибо за уделенное время, по своим ощущениям хочу сказать, что фреймворк довольно простой, есть удобная документация (https://flet.dev/docs/), но, к сожалению, кроме нее - ничего, никаких источников. Я думаю, этот фреймворк будет развиваться и попробовать его точно стоит!
    Весь код доступен выше или по ссылке: https://dpaste.com/4YZ3KGL3C
     
    8 июл 2023 Изменено
  2. zale4y
    zale4y 8 июл 2023 Заблокирован(а) 40 5 май 2021
    норм гайд, ты крут
     
  3. imtrue
    imtrue 8 июл 2023 Заблокирован(а) 74 25 июн 2023
    Прикольный фреймворк, еще есть kivy ( не реклама )
     
    1. dolezha Автор темы
      imtrue, сделать обзор?
    2. imtrue
      dolezha, сделай, очень полезный инструмент
  4. dxsya
    dxsya 8 июл 2023 моя искренняя грусть романтичней чем париж 189 11 мар 2019
    за старания лайк, но имхо супер хуйня и неюзабельно
     
    1. dolezha Автор темы
      dxsya, для небольших программ, думаю, сойдет
    2. Anticlowns
      dxsya, то что это единственный фреймворк, который работает асинк тебя не беспокит? Перед тем как написать ИМХО, ознакомься с технологией по глубже
  5. deposit
    deposit 10 июл 2023 Заблокирован(а) 164 2 июл 2022
  6. renameduser_3947452
    flet - это вписка в рб
     
  7. t1mka
    t1mka 29 июл 2023 1722 11 авг 2022
    фига, флаттер в питоне)
     
    29 июл 2023 Изменено
    1. dolezha Автор темы
      t1mka, спасибо за 50-ю по счету симпатию :) юбилей!
  8. json
    json 16 авг 2023 :lol: 1443 13 янв 2023
    Любой гуи на питоне кринж
     
    1. json
      dolezha, так по сути говорю. я питонист с опытом 3 года. я на нем что только не писал. питон слишком медленный для GUI. ну а как тренить то норм. калькулятору похуй, насколько быстро работает прога, а вот админпанельке нет. да и как ты будешь прогу распространять? любые сборщики питона костыли
    2. dolezha Автор темы
      json, дак на флете ты ток калькулятор и сделаешь
  9. roklem
    roklem 22 авг 2023 0 22 авг 2023
    То есть если стоит задача написать динамический сайт, то стоит задуматься об использовании классических фреймворков типа Джанго или фласк,вместо Flet или Kivi?
    Просто привлекает возможность сделать PWA (progressive web app) на Flet, пользуясь всякими встроенными виджетами, не прибегая к вёрстке и стилям
     
    1. dolezha Автор темы
      roklem, не просто стоит задуматься, а надо использовать ;)
Top