Flet 跨平台 Python UI 框架
Flet 是一个现代跨平台的 Python UI 框架,允许开发者使用纯 Python 构建 Web 应用、桌面应用(Windows/macOS/Linux)、移动应用(Android/iOS)。它基于 Flutter 渲染引擎,因此具有高性能、现代化 UI、响应式布局等优势,却无需掌握 Dart 或 Flutter,只需写 Python 即可。
Flet 特别适用于快速开发企业内部工具、后台管理界面、实时仪表盘、桌面应用原型等,被认为是'Python 世界的 Flutter'。
安装
pip install flet
常见应用场景
-
跨平台 GUI 开发(无需 Dart) 使用 Python 构建 Windows、macOS、Linux GUI 程序,界面效果与 Flutter 一致。
-
Web 应用与管理后台 一套代码可直接在浏览器运行,适合制作管理后台、仪表盘、可视化面板。
-
移动应用原型开发 可部署到移动端(Android / iOS),适合作为快速验证 UI 的工具。
-
实时应用与仪表盘 内置 WebSocket 支持,适合动态数据更新,如实时监控、业务面板。
-
企业内部工具 无需前端技术栈,快速做出内部系统界面或小型业务工具。
核心概念
1. Flet 应用程序(Page)
Flet 使用 page 对象表示应用页面,包含:
- 主题(light/dark)
- 控件列表
- 路由管理
- 响应式布局
- 事件回调执行环境
例如:
def main(page):
page.title = "Hello Flet"
2. 控件(Controls)
类似 Flutter 小部件(Widgets),但用 Python 创建。 常用控件包括:
- Text:文本
- TextField:输入框
- ElevatedButton:按钮
- Row / Column:布局
- Container:容器
- Image:图像
- DataTable:表格
- Dropdown:下拉框
- IconButton:图标按钮
Flet 控件均支持属性绑定与事件处理。
3. 事件回调(Events)
控件的事件通过 Python 函数处理,如:
def on_click(e):
print("Clicked!")
button.on_click = on_click
支持:
- 点击
- 输入变化
- 列表选择
- 滑块调整
- 路由变化
- 文件上传事件等
4. 响应式布局(Responsive Layout)
基于 Flutter 的布局系统,可灵活适配桌面/网页/移动端:
- Row
- Column
- ResponsiveRow
- 自动拉伸、对齐、边距控制
5. 热重载(Hot Reload)
开发时可直接热重载 UI,而不必重启应用。
应用举例
例 1:最简单的窗口
import flet as ft
def main(page: ft.Page):
page.add(ft.Text("Hello, Flet!"))
ft.app(target=main)
例 2:按钮点击事件
import flet as ft
def main(page: ft.Page):
def on_click(e):
page.add(ft.Text("按钮被点击"))
page.add(ft.ElevatedButton("点我", on_click=on_click))
ft.app(target=main)
例 3:输入框与响应
import flet as ft
def main(page: ft.Page):
name = ft.TextField(label="请输入姓名")
def update_name(e):
page.add(ft.Text(f"你好,{name.value}"))
page.add(name, ft.ElevatedButton("确认", on_click=update_name))
ft.app(target=main)
例 4:布局示例(Row + Column)
import flet as ft
def main(page: ft.Page):
page.add(
ft.Row([
ft.Container(ft.Text("左"), width=100,),
ft.Container(ft.Text("右"), width=100,)
])
)
ft.app(target=main)
例 5:运行 Web 模式
ft.app(target=main, view=ft.WEB_BROWSER)
常用函数与类速览
ft.app(target, view=None)
启动 Flet 应用。
- 参数:target(主函数,接收 Page 对象)、view(窗口类型:桌面、Web、移动)。
- 返回:无。
Page
Flet 应用主页面对象。
- 常用属性:title(页面标题)、controls(控件列表)、route(当前路由)、theme_mode(主题模式)。
- 常用方法:add()(添加控件)、update()(刷新页面)、go(route)(路由跳转)。
Controls(如 Text、Row、Button)
所有 UI 控件类型。参数包括文本内容、样式属性、事件回调等。返回控件对象。
Text(value)
显示文本控件。参数:value(字符串)。返回:Text 实例。
TextField(label=None)
文本输入框。参数:label(标签文字)。返回:TextField 实例。
ElevatedButton(text, on_click=None)
按钮控件。参数:text(按钮文字)、on_click(点击事件回调)。返回:ElevatedButton 实例。
Row/Column(controls)
水平或垂直布局。参数:controls(控件列表)。返回:布局对象。
Container(content, padding, bgcolor, expand=False)
容器控件。参数:content(子控件)、padding(内边距)、bgcolor(背景色)、expand(自动扩展)。
补充说明
- Flet 底层使用 Flutter 渲染,因此 UI 性能远高于 Tkinter / PySimpleGUI。
- Python 层不处理绘图,实际渲染在前端完成,通过 WebSocket 与 Python 交互。
- 可以打包为桌面应用(Flet CLI 支持打包)。
- 虽支持移动端,但当前在部署和性能上仍在持续改进中。
- 适合快速开发与内部工具,但不推荐用于复杂大型前端项目。
小结
Flet 使 Python 开发者能够以极低的学习成本构建现代、跨平台的 GUI 与 Web 应用。凭借 Flutter 的高性能渲染和丰富控件体系,Flet 适合构建内部工具、实时仪表盘、企业管理界面等高交互应用。其简单的事件机制、响应式布局和'纯 Python 无需前端'的开发模式极大降低了应用界面开发难度,是当前 Python 最具潜力的跨平台 UI 框架之一。
