商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何在 Flet 应用中实现重启后数据持久化(Python 教程)

如何在 Flet 应用中实现重启后数据持久化(Python 教程)

  发布于2026-07-17 阅读(0)

扫一扫,手机访问

日常用Flet写点小工具的时候,最烦人的莫过于:你辛辛苦苦加了一堆待办事项,关上窗口再打开,全没了。这不是Flet的锅——它默认所有数据都活在内存里,程序一退,内存释放,一切归零。但要解决这个问题,其实也没那么复杂。完全不需要引入什么用户系统、后端数据库,甚至不用注册登录。对于想快速落地的初学者来说,用本地文件持久化,是最直接也最靠谱的入门方案。 说到最省心的方案,我首推JSON文件。结构清晰,Python自带json模块,不需要额外装包,天然适配字典和列表。以后想扩展字段——比如加个截止时间、完成状态、多用户支持——直接在JSON结构里加键值对就行,非常灵活。 下面是一份完整的可运行示例,基于Flet 0.27+,拿来就能用: ```python import flet as ft import json import os # 定义数据文件路径 DATA_FILE = "tasks.json" # 初始化数据:从文件读取,若不存在则创建空列表 def load_tasks(): if os.path.exists(DATA_FILE): try: with open(DATA_FILE, "r", encoding="utf-8") as f: return json.load(f) except (json.JSONDecodeError, OSError): return [] return [] # 保存任务列表到文件 def sa ve_tasks(tasks): try: with open(DATA_FILE, "w", encoding="utf-8") as f: json.dump(tasks, f, ensure_ascii=False, indent=2) except OSError as e: print(f"⚠️ 保存失败:{e}") def main(page: ft.Page): page.title = "持久化待办清单" page.padding = 20 # 加载已有任务 tasks = load_tasks() # UI 控件 task_input = ft.TextField(hint_text="输入新任务...", expand=True) task_list = ft.Column(scroll="auto", height=300) # 渲染任务列表 def update_task_list(): task_list.controls.clear() for i, task in enumerate(tasks): cb = ft.Checkbox(label=task, value=False) task_list.controls.append(cb) page.update() # 添加任务 def add_task(e): if task_input.value.strip(): tasks.append(task_input.value.strip()) sa ve_tasks(tasks) # ✅ 关键:立即写入磁盘 task_input.value = "" update_task_list() # 页面布局 page.add( ft.Text("? 我的待办清单", size=24, weight="bold"), ft.Row([task_input, ft.ElevatedButton("添加", on_click=add_task)]), ft.Divider(), task_list ) # 首次加载显示任务 update_task_list() ft.app(target=main) ``` ### ⚠️ 注意事项与最佳实践 - **自动保存优于定时保存**:每次增删改操作后立即调用 sa ve_tasks(),避免意外崩溃导致数据丢失。 - **异常防御**:load_tasks() 中已经加了 JSON 解析异常和文件读取异常的处理,确保应用不会因为某个损坏文件就直接崩溃。 - **编码统一**:始终使用 encoding="utf-8",中文显示不会出乱码。 - **路径可移植性**:如果是正式项目,建议把 DATA_FILE 换成 `pathlib.Path.home() / ".myapp" / "tasks.json"`,存到用户主目录下更规范。 - **无需用户系统**:这套方案完全匿名,所有任务归属当前设备上的单个用户实例。如果将来需要多账户支持,直接扩展成 `{ "user1": [...], "user2": [...] }` 的结构就行。 - **Web 端兼容性说明**:Flet Web 应用运行在浏览器沙箱里,没法直接访问本地文件系统。这种情况下需要改用 `flet.session.set()` 配合后端 API,或者用 `localStorage`(通过 `page.client_storage`)。但桌面端(flet app)完全支持上述 JSON 方案。 ### ✅ 总结 对于新手来说,用 json 模块配合 .json 文件实现 Flet 应用的数据持久化,是成本最低、理解最直观、落地最可靠的方案。它绕开了复杂的数据库配置和用户认证体系,却足够支撑绝大多数个人工具类应用的核心需求。记住三个关键动作:**读(启动时)→ 改(交互中)→ 写(变更后)**,你的待办清单从此真正“记得住”。
本文转载于:https://www.php.cn/faq/2334318.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注