在 Flet 中,content
和 controls
是两个不同的属性,用于不同的上下文和目的。
1. content
属性
定义
- 用途:
content
通常用于定义一个控件内部的主要内容。 - 适用范围: 许多布局控件(如
ft.Container
,ft.Card
,ft.AppBar
等)都支持content
属性。 - 特点:
content
只能包含一个控件或布局对象(例如ft.Text
,ft.Column
,ft.Row
等)。- 如果需要包含多个子控件,必须使用布局组件(如
ft.Column
,ft.Row
)来包裹这些子控件。
import flet as ft
def main(page: ft.Page):
# 使用 Container 的 content 属性
container = ft.Container(
content=ft.Column( # 使用 Column 包裹多个控件
controls=[
ft.Text("Hello"),
ft.Text("World"),
],
alignment=ft.MainAxisAlignment.CENTER,
),
width=200,
height=200,
bgcolor=ft.colors.AMBER_500,
)
page.add(container)
ft.app(target=main)
在这个例子中,ft.Container
的 content
属性被设置为一个 ft.Column
,该列包含了两个 ft.Text
控件。
2. controls
属性
定义
- 用途:
controls
用于定义一组可以放置在某些容器中的子控件。 - 适用范围: 主要用于容器型控件(如
ft.Column
,ft.Row
,ft.Stack
等),允许直接添加多个子控件。 - 特点:
controls
是一个列表,可以直接包含多个控件。- 这些控件将按照容器的规则进行排列(如垂直排列、水平排列或堆叠)。
import flet as ft
def main(page: ft.Page):
# 使用 Column 的 controls 属性
column = ft.Column(
controls=[
ft.Text("Item 1"),
ft.Text("Item 2"),
ft.ElevatedButton(text="Click Me")
],
alignment=ft.MainAxisAlignment.CENTER,
)
page.add(column)
ft.app(target=main)
3. 区别总结
特性 | content | controls |
---|---|---|
用途 | 定义单个主要的内容控件 | 定义一组子控件 |
适用控件 | ft.Container , ft.Card , ft.AppBar 等 | ft.Column , ft.Row , ft.Stack 等 |
类型 | 单个控件或布局对象 | 列表,可包含多个控件 |
嵌套需求 | 需要使用布局组件(如 Column , Row )来包含多个控件 | 直接包含多个控件 |
4. 实际应用中的选择
-
当只需要一个控件作为主要内容时,使用
content
。例如,在ft.Container
中显示一个图标或一段文本。ft.Container(content=ft.Icon(name=ft.icons.HOME), width=50, height=50)
-
当有多个控件需要按某种方式排列时,使用
controls
。例如,在ft.Column
中垂直排列多个文本控件。ft.Column(controls=[ft.Text("Item 1"), ft.Text("Item 2")])
-
如果有一个复杂的布局需求,可以在
content
中使用布局组件(如ft.Column
或ft.Row
),然后在这些布局组件中使用controls
来管理多个子控件。ft.Container( content=ft.Column( controls=[ ft.Text("Header"), ft.Divider(), ft.Text("Body Text"), ] ), padding=10, border_radius=5, bgcolor=ft.colors.BLUE_GREY_100, )