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

Flet框架AppBar不显示问题:深红色AppBar未正常渲染

问题:Flet框架中AppBar显示异常,仅出现浅灰色页面

我使用Flet框架开发了一款名为MedSound的程序,希望显示一个深红色的AppBar,但运行程序后仅出现浅灰色页面。此前在此处创建Container组件可以正常工作,但改为AppBar后UI不符合预期。以下是我的代码:

import flet
from flet import *

myred = '#C3003D'
mydarkred = '#6C0022'
mygreen = '#05DF9D'
mywhite = '#FFFFFF'

class MedSoundApp(flet.UserControl):
    def __init__(self, page:Page):
        super().__init__()
        self.page = page
    def build(self):
        self.page.appbar = flet.AppBar(
            toolbar_height= 100,
            bgcolor=mydarkred
        )
        return self.page.appbar
        
def main(page:flet.Page):
    page.title ='MedSound'
    page.bgcolor = myred
    page.padding = 0
    page.spacing = 0
    page.fonts = {
    "Futura Book": "/fonts/Futura Book font.ttf",
    "Futura Bold": "/fonts/Futura Bold font.ttf",
    "Futura Medium": "/fonts/futura medium bt.ttf",
    "Futura Heavy": "/fonts/Futura Heavy font.ttf",
    }   
    page.theme = flet.Theme(font_family="Futura Book")
    page.add(
        MedSoundApp(page)
        )
flet.app(target=main, assets_dir="assets")

解决方案

问题根源在于你同时将AppBar赋值给page.appbar属性,又把它作为UserControl的返回值通过page.add()添加到页面,导致组件渲染冲突。Flet的AppBar是页面的专属顶部导航组件,不需要通过page.add()添加,只需直接设置page.appbar即可。

修改方式一:调整UserControl的build方法

只在build方法中设置page.appbar,返回页面的其他内容(比如填充页面的容器):

import flet
from flet import *

myred = '#C3003D'
mydarkred = '#6C0022'
mygreen = '#05DF9D'
mywhite = '#FFFFFF'

class MedSoundApp(flet.UserControl):
    def __init__(self, page:Page):
        super().__init__()
        self.page = page
    def build(self):
        self.page.appbar = flet.AppBar(
            toolbar_height= 100,
            bgcolor=mydarkred
        )
        # 返回填充页面的容器,确保页面背景色正常显示
        return Container(bgcolor=myred, expand=True)
        
def main(page:flet.Page):
    page.title ='MedSound'
    page.bgcolor = myred
    page.padding = 0
    page.spacing = 0
    page.fonts = {
    "Futura Book": "/fonts/Futura Book font.ttf",
    "Futura Bold": "/fonts/Futura Bold font.ttf",
    "Futura Medium": "/fonts/futura medium bt.ttf",
    "Futura Heavy": "/fonts/Futura Heavy font.ttf",
    }   
    page.theme = flet.Theme(font_family="Futura Book")
    page.add(
        MedSoundApp(page)
        )
flet.app(target=main, assets_dir="assets")

修改方式二:直接在main函数中设置AppBar

将AppBar的设置逻辑移到main函数里,UserControl仅负责页面的其他内容:

import flet
from flet import *

myred = '#C3003D'
mydarkred = '#6C0022'
mygreen = '#05DF9D'
mywhite = '#FFFFFF'

class MedSoundApp(flet.UserControl):
    def __init__(self, page:Page):
        super().__init__()
        self.page = page
    def build(self):
        # 返回页面的主要内容
        return Container(bgcolor=myred, expand=True)
        
def main(page:flet.Page):
    page.title ='MedSound'
    page.bgcolor = myred
    page.padding = 0
    page.spacing = 0
    # 直接在main中设置AppBar
    page.appbar = flet.AppBar(
        toolbar_height= 100,
        bgcolor=mydarkred
    )
    page.fonts = {
    "Futura Book": "/fonts/Futura Book font.ttf",
    "Futura Bold": "/fonts/Futura Bold font.ttf",
    "Futura Medium": "/fonts/futura medium bt.ttf",
    "Futura Heavy": "/fonts/Futura Heavy font.ttf",
    }   
    page.theme = flet.Theme(font_family="Futura Book")
    page.add(
        MedSoundApp(page)
        )
flet.app(target=main, assets_dir="assets")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:43:23