主题
颜色使用指南 (Working with Colors)

Flet 支持两种定义颜色的主要方式:
- 十六进制颜色值 (Hexadecimal values)
- 命名颜色 (Named colors)
十六进制颜色值 (Hexadecimal Values)
十六进制颜色值遵循以下格式之一:
#aarrggbb或0xaarrggbb#rrggbb或0xrrggbb(如果省略了表示不透明度的aa通道,则不透明度默认为ff)
python
>>> ft.Container(bgcolor="#ff0000")命名颜色 (Named Color)
Flet 使用了 Material Design 主题颜色和调色板。
你可以通过两种方式来定义命名颜色:
- 字符串方式(例如
"blue"、"redAccent100") - Enums 方式(利用
Colors或CupertinoColors枚举以获得更好的类型安全和代码自动补全支持)
python
>>> ft.Container(bgcolor="yellow")
>>> ft.Container(bgcolor=ft.Colors.YELLOW)
>>> ft.Container(bgcolor=ft.CupertinoColors.DESTRUCTIVE_RED)主题颜色 (Theme Colors)

在 Theme.color_scheme 中有 30 个命名主题颜色,它们是基于 Theme.color_scheme_seed 生成的,默认的种子颜色是 Colors.BLUE。
python
>>> page.theme = ft.Theme(color_scheme_seed=ft.Colors.GREEN)这 30 个主题配方颜色中的任何一个都可以被单独重写覆盖。重写后,它们将具有绝对颜色值,不再依赖于种子颜色。
python
page.theme = ft.Theme(
color_scheme=ft.ColorScheme(
primary=ft.Colors.GREEN,
error=ft.Colors.RED,
),
)
主题颜色作为大多数 Flet 控件的后备颜色(Fallback)。
调色板 (Color Palettes)

调色板最初由 Material Design 于 2014 年引入,是一组经过精心协调、能够和谐共存的颜色集合。
每个**色板(Swatch / 调色板)**包含特定颜色的多个色调阴影,其中较小的数字代表较浅的色调,较大的数字代表较深的色调。大多数调色板色号范围从 50 到 900,步长为 100,而强调色色板(例如 Colors.RED_ACCENT)仅包含 100, 200, 400 和 700。
除了调色板外,Flet 还提供了内置了不透明度的命名黑色和白色变体,例如:
Colors.BLACK_54→ 不透明度为 54% 的黑色Colors.WHITE_70→ 不透明度为 70% 的白色
这些调色板颜色可以被:
- 直接用作控件的颜色相关属性的值(例如
bgcolor、color) - 用作种子颜色,通过
Theme.color_scheme_seed生成动态主题配色方案
颜色不透明度 (Color opacity)
Flet 提供了多种设置不透明度的方法:
使用 with_opacity
此方法存在于 Colors 和 CupertinoColors 枚举中。它接收一个颜色和一个不透明度值,并返回 Flet 可以识别的格式为 "color,opacity" 的字符串。
python
>>> ft.Colors.with_opacity(0.5, ft.Colors.RED)
"red,0.5"
>>> ft.CupertinoColors.with_opacity(0.8, ft.CupertinoColors.LINK)
"link,0.8"十六进制不透明度通道
对于十六进制格式的颜色,你可以为 aa 通道指定 00 至 ff 之间的值。
python
>>> "#7fff6666"为 Flet 控件定义颜色
大部分 Flet 控件拥有通过 Theme.color_scheme 定义的默认颜色,并且可以在不同层级上对它们进行重写覆盖。
控件层级 (Control Level)
如果将一个颜色直接作为控件属性(如 color、bgcolor)的值提供,它将直接被使用。
python
>>> ft.Card(bgcolor=ft.Colors.GREEN_200)注意:并非所有 Flet 控件都在控件层级提供颜色属性。例如,FilledButton 总是拥有默认的 “primary” 颜色,该颜色是由其最近的父级(Ancestor)主题决定的。
控件主题层级 (Control Theme Level)
Theme 对象拥有许多属性,可以用于覆盖 Flet 控件的默认颜色。
例如,最近的 Theme.card_bgcolor 将用于 Card 控件。
注意:如果你需要改变特定子孙控件的主题,可以将它们包裹在例如 Container 中,并定制该容器的 theme 属性,它将自动应用到其所有的子孙控件上。
祖先主题层级 (Ancestor Theme Level)
Flet 会在组件树中向上搜索,以寻找最近的定义了主题的父祖级控件,并从中获取 Theme.color_scheme 的颜色。在下面的示例中,FilledButton 的最近祖先是 Container,因此该按钮使用的 primary 颜色将被取自 Container.theme。
python
import flet as ft
def main(page: ft.Page):
page.add(
ft.Container(
width=200,
height=200,
border=ft.Border.all(1, ft.Colors.BLACK),
content=ft.FilledButton("Primary color"),
theme=ft.Theme(color_scheme=ft.ColorScheme(primary=ft.Colors.YELLOW))
)
)
ft.run(main)如果某个控件、其父级或其父级的祖先均没有定义主题,则该控件默认使用最顶层祖先的主题,即 Page.theme(或者在暗黑模式下使用 Page.dark_theme)。