Flet 开发使用感受

该文章已生成可运行项目,


最近在使用 Flet 进行桌面开发,整体体验相当不错。Flet 基于 Python 和 Flutter,支持跨平台运行,能够在桌面、Web 和移动端上使用同一套代码,这对于开发者而言是很大的优势。本文通过一个简单的登录界面示例,介绍 Flet 的使用方法,并总结其优缺点。


🚀 Flet 的优缺点分析

✅ 优点

  • 跨平台支持:一套代码即可在 Windows、macOS、Linux、Web 和移动端运行,减少了平台兼容性问题。
  • Python 生态集成:可以直接使用 Python 生态的库,如 requestspandasmatplotlib 等。
  • 快速开发:Flet 提供了一套完整的 UI 组件,API 设计简单,开发效率高。
  • 状态管理便捷:内置状态管理机制,简化了界面状态的同步和更新。
  • 封装灵活:可以基于现有组件进行二次封装,形成更高层次的复用能力。

❌ 缺点

  • 构建体积过大:即使是一个简单的“Hello World”程序,打包后的体积可能也会超过 100MB。
  • 启动速度慢:由于底层是 Flutter,启动时存在一定的冷启动延迟。
  • 构建速度慢:打包过程较长,构建一个可执行文件可能需要几分钟。
  • 扩展性有限:虽然 Flet 提供的基础组件很丰富,但在高度自定义或复杂场景下,扩展性相对受限。

🏆 完整示例代码

以下是一个完整的登录界面示例,封装了常用组件,展示了 Flet 的基本用法。

import flet as ft

# 🔨 封装常用组件
class BaseComponents:
    @staticmethod
    def create_text(text, size, weight, color):
        return ft.Text(text, size=size, weight=weight, color=color, font_family="微软雅黑")

    @staticmethod
    def create_text_field(label, width, password=False, can_reveal_password=False):
        return ft.TextField(label=label, width=width, password=password, can_reveal_password=can_reveal_password)

    @staticmethod
    def create_button(text, on_click, width):
        return ft.ElevatedButton(text=text, on_click=on_click, width=width)

    @staticmethod
    def create_alert_dialog(title_text):
        return ft.AlertDialog(title=ft.Text(title_text))

# 🏠 页面基类
class BasePage:
    def __init__(self, page):
        self.page = page
        self.page.window.width = 350
        self.page.window.height = 300

    def show(self):
        self.page.clean()
        self.page.add(self.build())

    def build(self):
        raise NotImplementedError("需在子类中实现 build 方法")

# 🔐 登录页面
class LoginPage(BasePage):
    def __init__(self, page, login_callback):
        super().__init__(page)
        self.login_callback = login_callback
        self.dlg = BaseComponents.create_alert_dialog("用户名或密码错误!")

        self.username = BaseComponents.create_text_field("用户名", 300)
        self.password = BaseComponents.create_text_field("密码", 300, password=True, can_reveal_password=True)
        self.login_button = BaseComponents.create_button("登录", self.login_click, 300)

    def login_click(self, e):
        is_success, message = self.login_callback(self.username.value, self.password.value)
        if is_success:
            SuccessPage(self.page, message).show()
        else:
            self.page.open(self.dlg)

    def build(self):
        return ft.Column(
            [self.username, self.password, self.login_button],
            alignment=ft.MainAxisAlignment.CENTER,
            spacing=20,
        )

# ✅ 登录成功页面
class SuccessPage(BasePage):
    def __init__(self, page, message):
        super().__init__(page)
        self.message = message

    def build(self):
        return ft.Text(self.message, size=20, color=ft.Colors.GREEN)

# 🔎 登录验证(模拟)
def login_check(username, password):
    if username == "admin" and password == "123456":
        return True, "登录成功!"
    return False, "用户名或密码错误!"

# 🚀 启动程序
def main(page):
    LoginPage(page, login_check).show()

if __name__ == "__main__":
    ft.app(target=main)

🎯 核心思路解析

🔨 1. 基础组件封装

为了避免重复编写代码,将常用组件(如文本、输入框、按钮等)封装在 BaseComponents 类中,方便复用。

@staticmethod
def create_button(text, on_click, width):
    return ft.ElevatedButton(text=text, on_click=on_click, width=width)

🌐 2. 页面基类设计

通过 BasePage 定义了一个页面基类,所有页面都继承自该类,统一窗口配置和渲染逻辑。

class BasePage:
    def __init__(self, page):
        self.page = page

    def show(self):
        self.page.clean()
        self.page.add(self.build())

🔑 3. 登录逻辑实现

login_check 中简单模拟了登录验证逻辑,方便快速调试。

def login_check(username, password):
    if username == "admin" and password == "123456":
        return True, "登录成功!"
    return False, "用户名或密码错误!"

🎬 效果展示

xxxx

运行命令:

pip install flet
flet run
  • 输入正确的用户名和密码 ➡️ 显示“登录成功”
  • 输入错误的用户名或密码 ➡️ 弹出“用户名或密码错误”

💡 总结

Flet 提供了一个高效的 Python 界面开发方案,得益于其跨平台特性和 Python 的生态支持,开发效率较高。然而,较大的构建体积和较慢的启动速度在某些场景下可能成为限制。

适用场景

✅ 快速原型开发
✅ 内部管理工具
✅ 轻量级桌面或 Web 应用

不适用场景

❌ 需要高性能的客户端
❌ 需要高度定制的复杂 UI
❌ 大型商业项目


🧐 未来改进方向

  • 尝试通过剥离不必要的组件,减小构建体积
  • 采用增量构建,提升打包速度
  • 探索更优的跨平台方案

📌 总结思考

Flet 是一个很有潜力的 Python GUI 框架,适合快速开发和小型跨平台应用。如果后续能在性能和体积方面有所优化,Flet 将会更具竞争力。

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值