跳到主要内容

颜色

颜色值

在 Flet 中,颜色属性值可以通过两种方式定义:十六进制值和命名颜色。

十六进制值

十六进制值应该以 #aarrggbb (0xaarrggbb) 或 #rrggbb (0xeeggbb) 格式表示。如果省略 aa (不透明度),则将其设置为 ff(不透明)。

c1 = ft.Container(bgcolor='#ff0000')

Live 示例

命名颜色

命名颜色是 Material Design 主题颜色颜色调色板。它们可以使用字符串值或使用 flet.colors 模块设置。

c1 = ft.Container(bgcolor=ft.colors.YELLOW)
c2 = ft.Container(bgcolor='yellow')

主题颜色

Live 示例

有 30 个命名主题颜色在 Theme.color_scheme 中,它们是基于 color_scheme_seed 属性生成的。默认的种子颜色值是 "blue"。

# 生成页面主题颜色基于种子颜色的示例
page.theme = Theme(color_scheme_seed='green')
page.update()

任何 30 个颜色都可以被覆盖,在这种情况下它们将具有绝对值,不再依赖于种子颜色。

page.theme = ft.Theme(
color_scheme=ft.ColorScheme(
primary=ft.colors.GREEN,
primary_container=ft.colors.GREEN_200
#...
),
)

主题颜色定义了大多数 Flet 控件的回退颜色。

颜色调色板

Live 示例

Material Design 在 2014 年创建了颜色调色板,它们是旨在协调工作的颜色集合。

颜色 swatches(调色板)由某个颜色的不同阴影组成。大多数 swatches 都有从 100900 的阴影值,以百为单位,另外还有 50 的阴影值。数字越小,颜色越浅。数字越大,颜色越暗。强调 swatches(例如 redAccent)只有 100200400700 的值。

此外,还有黑色和白色的常见不透明度值可用。例如,black54 是纯黑色,具有 54% 的不透明度。

调色板颜色可以用于设置单个控件的颜色属性或作为种子颜色生成主题颜色。

颜色不透明度

您可以使用 with_opacity 方法为任何颜色(十六进制值或命名颜色)指定不透明度。不透明度值应该在 0.0(完全透明)和 1.0(不透明)之间。

color = ft.colors.with_opacity(0.5, ft.colors.PRIMARY)
color = ft.colors.with_opacity(0.5, '#ff6666')

另一种方式是使用字符串值指定不透明度:

color = "surface,0.5"

对于十六进制值,您可以指定 aa 通道的值,范围从 00ff,例如:

color = "#7fff6666"

为 Flet 控件定义颜色

大多数 Flet 控件都有默认颜色定义在 color_scheme 中,可以在不同的级别上覆盖。

Live 示例

控件级别

如果颜色在控件级别上定义,它将被使用。

c = ft.Container(width=100, height=100, bgcolor=ft.colors.GREEN_200)

不是所有 Flet 控件都有颜色属性可以在控件级别上设置。例如,FilledButton 总是具有默认的 "primary" 颜色,定义在最近的祖先的 theme 中。

控件主题级别

对于 ScrollBar(用于滚动控件:PageViewColumnRowListViewGridView)、TabsText 控件,Flet 将检查最近的祖先主题是否具有 ScrollBar 主题Tabs 主题Text 主题

备注

如果您需要为特定的 ScrollBar、Text 或 Tabs 控件更改主题,可以将该控件包装在 Container 中,并自定义 Container 的 theme 中的 scrollbar_themetext_themetabs_theme

主题级别

Flet 将检查最近的祖先主题是否具有 theme 定义,并从 ColorScheme 中获取颜色。在下面的示例中,最近的祖先是 Container,并且 primary 颜色将从 Container 的 theme 中获取。

import flet as ft

def main(page: ft.Page):

container = 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))
)

page.add(container)

ft.app(target=main)

如果控件的颜色属性、控件特定主题或最近的祖先主题没有指定,则最近的祖先将是页面,并且颜色将从默认页面 color_scheme 中获取。