Flet框架详解:如何快速构建交互式多用户Web、桌面和移动应用程序
什么是Flet

Flet 是一个框架,它具备这样的能力:能够让你用自己喜爱的语言去构建交互式的多用户 Web 应用程序,也能够构建桌面应用程序以及移动应用程序,并且在这个过程中,不需要你具备前端开发的经验。
主要特点 在几分钟内从想法到应用程序
您的团队的周末项目、数据输入表单、kiosk 应用程序或高保真原型所使用的内部工具或仪表板,Flet 是一个理想的框架,它能够快速打造出一个美观的交互式应用程序,为一组用户提供服务。
简单的架构
没有复杂的架构以及 JavaScript 前端、REST API 后端、数据库和缓存等。使用 Flet 时,您仅仅需要在 Python 中编写一个整体式且有状态的应用程序,这样就能获得多用户实时的单页应用程序(SPA)。
包括电池
开始使用 Flet 进行开发时,您只需使用自己喜欢的 IDE 或文本编辑器。它没有 SDK,没有成千上万的依赖项,也没有复杂的工具。Flet 具备内置的 Web 服务器,该服务器包含托管资产和桌面客户端。
由Flutter提供动力
Flet 能够简化 Flutter 模型,它通过将较小的“小部件”组合成具有命令式编程模型的即用型“控件”。
语言无关
Flet 与语言没有关联。所以团队里的任何人都能够用自己喜爱的语言去开发 Flet 应用程序。其中 Python 已经获得了支持,而 Go、C#以及其他产品也在紧跟其后。
交付到任何设备
部署 Flet 应用为 Web 应用,然后在浏览器中查看它。把它打包成适用于 Windows、macOS 和 Linux 的独立桌面应用程序。在移动设备上安装它作为 PWA,或者通过适用于 iOS 和 Android 的 Flet 应用程序进行查看。
安装使用
pip install flet
一个简单的计数示例
import flet
icons 来自 flet。
def main(page: Page):
page 的标题是 "Flet counter example"
页面的垂直对齐方式为“居中”。
TextField 的 value 为 "0",其 text_align 为 "right",宽度为 100
def minus_click(e):
将 txt_number.value 的值转换为整数类型,然后将其减 1 赋值给 txt_number.value 。
page.update()
def plus_click(e):
将 txt_number.value 的值转换为整数类型,然后在此基础上加 1 。 即先获取 txt_number.value 的值,将其转换为整数,再进行加 1 的操作 。 也就是让 txt_number.value 所代表的值增加 1 。 具体是把 txt_number.value 原本的值当作整数来处理,然后在这个整数的基础上加上 1 。
page.update()
page.add(
Row(
[
IconButton,其图标为 icons.REMOVE,当点击时会触发 minus_click 函数。
txt_number,
IconButton,其图标为 icons.ADD,点击时会触发 plus_click 函数。
],
alignment="center",
)
)
flet.app(target=main)
运行程序:
python counter.py
如何我们希望它只运行在浏览器端,可以如下配置:
flet.app ,其目标为 main ,视图为 flet.WEB_BROWSER 。
默认运行的是桌面端。在我们启动时,会在随机端口启动一个 web 服务器,并且可以通过 web 端进行访问。
这是官方给的简单示例,我们来写一个稍微复杂一点的:计算器。
页面代码较多,不过较为简单,所以就不粘贴了。可以看出,即使使用原生控件拼出页面效果也不错,比其他 Python 桌面开发库好看很多。它虽没有 QT 那样通过拖拖拽拽就能生成页面的界面设计器,但布局方式与前端相同,所以对于会前端的开发人员来说很熟悉,使用起来也很方便。
总结
目前这个项目处于 BETA 版状态,其官方文档存在不完善之处。然而,用它来开发一些基础软件是可行的。尤其在基于 Flutter 的情况下,无需像 Electron 那样将 chromium 内核打包进去。后期接入多种语言之后,会给众多程序员提供一种优秀的跨平台开发方式。这种方式无需像 Electron 和 Flutter 那样,必须具备特定的开发语言才能开始使用。大家都在期待它变得更加完善。