如何在Flet的App类中调用并显示对话框?
在Flet的UserControl内部触发对话框的实现方法
有两种常用方案可以在继承自UserControl的App类内部触发显示对话框:
方案一:初始化时传入Page实例
在main()函数中创建Page对象后,实例化App时将page作为参数传入,在App类中保存该引用,后续即可通过此引用操作对话框。
示例代码:
import flet as ft class App(ft.UserControl): def __init__(self, page: ft.Page): super().__init__() self.page = page # 保存Page引用 def show_dialog(self, e): # 创建对话框 dialog = ft.AlertDialog( title=ft.Text("提示"), content=ft.Text("这是从App类内部触发的对话框"), actions=[ft.TextButton("确定", on_click=self.close_dialog)] ) self.page.dialog = dialog dialog.open = True self.page.update() def close_dialog(self, e): self.page.dialog.open = False self.page.update() def build(self): return ft.ElevatedButton("打开对话框", on_click=self.show_dialog) def main(page: ft.Page): page.title = "Flet对话框示例" page.add(App(page)) # 传入Page实例 if __name__ == "__main__": ft.app(target=main)
方案二:利用UserControl自带的page属性
当UserControl被添加到Page后,Flet会自动为其设置self.page属性,无需手动传入,直接在事件回调中使用即可(确保控件已被添加到页面后调用)。
示例代码:
import flet as ft class App(ft.UserControl): def show_dialog(self, e): dialog = ft.AlertDialog( title=ft.Text("提示"), content=ft.Text("通过UserControl自带的page属性打开对话框"), actions=[ft.TextButton("确定", on_click=self.close_dialog)] ) self.page.dialog = dialog dialog.open = True self.page.update() def close_dialog(self, e): self.page.dialog.open = False self.page.update() def build(self): return ft.ElevatedButton("打开对话框", on_click=self.show_dialog) def main(page: ft.Page): page.title = "Flet对话框示例" page.add(App()) # 无需传入Page if __name__ == "__main__": ft.app(target=main)
方案对比
- 方案一适合需要在
App类初始化阶段就操作Page的场景; - 方案二更简洁,仅需在控件加载后的事件中使用
self.page即可。
内容的提问来源于stack exchange,提问作者Detux
相关产品推荐
相关产品推荐

