You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:15:13