主题化 Theming
可以配置你的应用程序和/或包含的控件以遵循特定的主题。
应用程序范围的主题
Page
控件(树中的最上层控件)有两个对此有用的属性:theme
和dark_theme
属性,分别用于在浅色和深色主题模 式下配置整个应用程序的外观/主题。
两者的类型均为Theme
,它们表示在整个应用程序中使用的默认/回退主题,除非在树中明确修改/覆盖。
page.theme = ft.Theme(color_scheme_seed=ft.colors.GREEN)
page.dark_theme = ft.Theme(color_scheme_seed=ft.colors.BLUE)
嵌套主题
你可以让你的应用程序的一部分使用不同的主题或为特定的控件覆盖一些主题样式。一些类似容器的控件分别具有类型为Theme
和ThemeMode
的theme
和theme_mode
属性。在Container
中指定theme_mode
意味着你不想继承父主题模式,而是想为容器内的所有控件使用一个全新的、独特的方案。然而,如果容器没有设置theme_mode
属性,那么其theme
属性中的样式将覆盖从父级继承的主题中的样式:
import flet as ft
def main(page: ft.Page):
# 黄色页面主题,使用 SYSTEM(默认)模式
page.theme = ft.Theme(
color_scheme_seed=ft.colors.YELLOW,
)
page.add(
# 页面主题
ft.Container(
content=ft.ElevatedButton("Page theme button"),
bgcolor=ft.colors.SURFACE_VARIANT,
padding=20,
width=300,
),
# 继承的主题,覆盖主颜色
ft.Container(
theme=ft.Theme(color_scheme=ft.ColorScheme(primary=ft.colors.PINK)),
content=ft.ElevatedButton("Inherited theme button"),
bgcolor=ft.colors.SURFACE_VARIANT,
padding=20,
width=300,
),
# 独特的始终为 DARK 主题
ft.Container(
theme=ft.Theme(color_scheme_seed=ft.colors.INDIGO),
theme_mode=ft.ThemeMode.DARK,
content=ft.ElevatedButton("Unique theme button"),
bgcolor=ft.colors.SURFACE_VARIANT,
padding=20,
width=300,
),
)
ft.app(main)