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

Python Flet桌面应用自动跳转闪屏页实现技术咨询

Flet闪屏页自动跳转与顶层视图获取解决方案

问题根源梳理

  1. time.sleep()阻塞UI:Flet是单线程UI框架,直接调用time.sleep()会卡死界面,闪屏页无法渲染,跳转逻辑自然失效。
  2. 缺少合法Page实例:直接调用page_nav(e)时没有传递有效的事件对象e,无法获取ft.Page实例。
  3. 顶层视图获取逻辑:Flet用page.views列表存储视图栈,最后一个元素就是当前显示的顶层视图。

闪屏页自动跳转实现

核心思路:利用View.on_load事件监听闪屏页加载完成,通过ft.Timer实现非阻塞倒计时,既不卡死UI,又能拿到Page实例。

修改后的闪屏页代码:

from flet import View
import flet as ft
import random

# 生成6位随机颜色,补零避免格式错误
rand_clr = f"{random.randint(0, 999999):06d}"

def page_nav(page):
    page.window_visible = False
    page.update()
    page.go("/home")

def on_splash_load(e):
    # 3秒后执行跳转
    ft.Timer(3.0, lambda: page_nav(e.page))

def _view_():
    return ft.View(
        "/index",
        controls=[
            ft.Column(
                controls=[
                    ft.Container(
                        width=120,
                        height=120,
                        bgcolor=f'#{rand_clr}',
                        content=ft.Text("Index Page")
                    ),
                ]
            )
        ],
        on_load=on_splash_load  # 视图加载完成触发倒计时
    )

主页面代码优化

  1. 设置初始路由为/index,启动后直接进入闪屏页。
  2. 简化路由判断逻辑,避免冗余代码。

修改后的主页面代码:

import flet as ft

from pages.index import _view_ as splash_view
from pages.home import _view_ as home_view
from pages.contact import _view_ as contact_view

def master(page: ft.Page):
    page.title = "Routing"
    page.window_height = 250
    page.window_width = 250
    page.window_center()

    def route_change(route):
        page.views.clear()
        if page.route == "/home":
            page.window_visible = True
            page.window_maximized = True
            page.views.append(home_view())
        elif page.route == "/contact":
            page.views.append(contact_view())
        elif page.route == "/index":
            page.window_visible = True
            page.views.append(splash_view())
        page.update()

    def view_pop(view):
        page.views.pop()
        # 跳转回顶层视图
        if page.views:
            top_view = page.views[-1]
            page.go(top_view.route)

    page.on_route_change = route_change
    page.on_view_pop = view_pop
    # 启动直接进入闪屏页
    page.go("/index")

ft.app(target=master)

获取当前顶层视图

在能访问page实例的场景下,直接取page.views的最后一个元素即可:

if page.views:
    top_view = page.views[-1]
    print(f"当前顶层视图路由: {top_view.route}")
  • page.views按视图堆叠顺序存储,最后一项始终是当前显示的视图。
  • 需先判断列表是否为空,避免索引越界报错。

内容的提问来源于stack exchange,提问作者Jacob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:44:56