Flet 就是把前端这件事“封装”给后端程序员:你只管写 Python 的界面逻辑(State + 事件处理),Flet 底层用 Flutter 渲染界面并负责跨平台展示。写出来是单页应用(SPA),也能打包成桌面或手机原生应用,或者作为 PWA / web 部署。它更像一个“Python 的前端 SDK + 运行时”,把前端复杂度(框架选型、构建链、跨域、前后端分离)都藏起来了。
Flet 解决了哪些真实痛点(很重要)
- • 你不会前端:不用学 React/Vue/Angular、也不用写一堆 CSS,只要 Python。
- • 快速 prototyping:想做内部工具、数据录入、小仪表盘,能在几分钟到几个小时内看到成品。
- • 简化架构:不需要前后端分离的服务化设计,写一个 stateful 的 Python 程序就能多人实时交互(内建实时更新机制)。
- • 部署和打包简单:有内置的 web server 和桌面客户端打包选项,不用折腾复杂的构建链或 Electron。
- • 跨平台 UI 一致:UI 底层是 Flutter,样式和体验相对统一,且相对轻量(比 Electron 好很多)。
安装与快速上手(实操步骤)安装很轻松,打开终端敲两句:
pip install 'flet[all]'
- • 一个最简单的示例(计数器)保存为 counter.py:
import flet as ftdefmain(page: ft.Page): page.title = "Flet counter example" page.vertical_alignment = ft.MainAxisAlignment.CENTERinput = ft.TextField(value="0", text_align=ft.TextAlign.RIGHT, width=100)defminus_click(e):input.value = str(int(input.value) - 1) page.update()defplus_click(e):input.value = str(int(input.value) + 1) page.update() page.add( ft.Row( alignment=ft.alignment.center, controls=[ ft.IconButton(ft.Icons.REMOVE, on_click=minus_click),input, ft.IconButton(ft.Icons.ADD, on_click=plus_click), ], ) )ft.run(main)
运行:
flet run counter.py
- • 在脚本最后改成:
ft.run(main, view=flet.AppView.WEB_BROWSER) - • 或用命令行:
flet run --web counter.py
就这么简单,页面会打开,按钮响应,state 会在 Python 里改变,你也许会惊讶这不是网页而更像原生窗口的感觉。
Flet 的核心架构Python 程序 + Flet runtime(内置 web server + 与 Flutter 客户端通信)→ 渲染为多平台 UI。几乎把常见的前端烦恼都“拉回”到 Python 里处理。
优点(表格形式,便于对比)
| |
| |
| 同一套代码可做 web / desktop / mobile / PWA |
| |
| |
| 外观现代、一致性好,性能优于 Electron(通常) |
缺点与局限
- • 对于极其复杂或高度定制的前端需求,Flet 的抽象可能不够灵活(尤其需要细粒度 CSS/动画时)。
- • 生态相对小:第三方 UI 组件、社区插件不像 React 那样丰富。
- • 性能边界:对于大型、高并发的生产级 web 应用,传统前后端分离 + 专业前端优化可能更合适。
- • 移动端打包对上架(App Store / Google Play)还需要做原生签名、适配、提交流程,不是“一键交付”。
总结如果你厌倦了前端生态的学习曲线,又想把 Python 脚本、分析结果、数据可视化快速变成“有人能用”的工具,Flet 真心值得试试。它不是面面俱到的前端替代品,但在“快速落地、跨平台、少学习成本”这三点上非常有竞争力。想做原型或小团队内部工具?用 Flet,省时省力,还容易让人上手——这就够香了。
项目地址:https://github.com/flet-dev/flet