Flet桌面应用关闭触发事件并保存数据报错问题求助
Flet应用关闭时保存数据并正常退出的解决方案
你的问题核心在于设置page.window.prevent_close = True后,直接调用page.window.destroy()会重复触发窗口关闭事件,而os._exit(0)会绕过Flet的正常退出流程导致异常循环。
正确处理步骤
在完成数据保存后,先取消窗口关闭阻止,再执行销毁操作,避免重复触发关闭事件:
修改后的代码如下:
def on_close_event(e): if e.data == "close": # 保存未完成任务到JSON的逻辑 un_tasks = dict() i = 0 for tt in tab_download.tasks.controls: if type(tt.value) == str: un_tasks[i] = {"ttask": tt.ttask, "value": {"name": "", "path": ""}} else: un_tasks[i] = {"ttask": tt.ttask, "value": {"name": tt.value.name, "path": tt.value.path}} i += 1 write_unfinished_tasks(un_tasks) # 先取消阻止窗口关闭,再销毁窗口 page.window.prevent_close = False page.window.destroy() page.window.prevent_close = True page.window.on_event = on_close_event
原理说明
page.window.prevent_close = True会拦截所有窗口关闭请求,强制触发on_event回调- 如果直接调用
destroy(),会再次触发关闭事件,导致回调重复执行,引发报错或循环 - 先将
prevent_close设为False,再调用destroy(),此时关闭操作不会被拦截,能正常退出应用
内容的提问来源于stack exchange,提问作者Łukasz Świątek
相关产品推荐
相关产品推荐

