技术问询:Flet应用是否支持同时打开多个窗口?
Flet 多窗口实现方案
Flet 完全支持创建多个独立窗口,能够满足你“一个窗口常驻显示、另一个按需调用打开”的需求,无需依赖路由切换或在同一页面堆叠组件。
核心实现思路
通过 flet.Window 类可以直接创建独立于主窗口的新窗口,主窗口保持常驻,通过触发事件(比如按钮点击)来唤起次级窗口,两者的UI和生命周期完全独立。
完整代码示例
import flet as ft # 控制次级窗口是否已打开,避免重复创建 secondary_window_instance = None def open_secondary_window(): global secondary_window_instance if secondary_window_instance is not None and secondary_window_instance.is_open: return # 窗口已打开时不再重复创建 # 初始化次级窗口 secondary_window_instance = ft.Window( title="按需打开的次级窗口", width=400, height=300, resizable=True, left=200, top=200 ) # 构建次级窗口的UI内容 secondary_window_instance.content = ft.Column( controls=[ ft.Text("这是独立的次级窗口", size=18), ft.ElevatedButton("关闭窗口", on_click=lambda e: secondary_window_instance.close()) ], alignment=ft.MainAxisAlignment.CENTER, horizontal_alignment=ft.CrossAxisAlignment.CENTER, spacing=20 ) # 监听窗口关闭事件,重置实例标记 def on_window_close(e): global secondary_window_instance secondary_window_instance = None secondary_window_instance.on_close = on_window_close # 显示次级窗口 secondary_window_instance.show() def main(page: ft.Page): page.title = "主窗口(始终可见)" page.window.width = 600 page.window.height = 400 page.window.resizable = True # 添加唤起次级窗口的按钮 page.add( ft.ElevatedButton( "打开次级窗口", on_click=lambda e: open_secondary_window(), size=ft.ButtonSize.LARGE ) ) if __name__ == "__main__": ft.app(target=main)
关键说明
- 主窗口会持续保持打开状态,点击按钮即可唤起独立的次级窗口,两者互不干扰。
- 通过全局变量
secondary_window_instance可以限制次级窗口只能打开一个,避免重复创建多个相同窗口。 - 可以自定义次级窗口的属性:比如设置
always_on_top=True让窗口置顶,或者调整width/height控制窗口大小。 - 次级窗口的关闭事件可以用来清理实例标记,确保下次点击按钮能正常重新打开窗口。
内容的提问来源于stack exchange,提问作者Patricio VAZQUEZ
相关产品推荐
相关产品推荐

