ColumnWidget API¶
ColumnWidget(widget_id=None)
¶
Bases: BaseWidget
创建一个多列布局容器,用于水平排列多个微件。
该微件使用 <table>
元素来确保在各种邮件客户端中的最大兼容性。
你可以将任何其他微件(如 TextWidget
, CardWidget
, ChartWidget
等)
放入列布局中,以创建复杂且美观的邮件版式。
核心功能
- 自动列数: 默认情况下,它会根据内部微件的数量智能地计算出最佳列数。
- 手动列数: 你也可以手动指定1到4之间的固定列数。
- 响应式: 布局会根据屏幕宽度自动调整,确保在桌面和移动设备上都有良好体验。
- 间隔控制: 可以自定义列与列之间的水平间距。
自动列数规则
- 1个微件: 1列
- 2个微件: 2列
- 3个微件: 3列
- 4个微件: 2列 (2x2 网格)
- 5-6个微件: 3列
- 7-8个微件: 2列
- 9个及以上: 3列
Examples:
创建一个两列布局,左侧是卡片,右侧是图表:
from email_widget.widgets import ColumnWidget, CardWidget, ChartWidget
import matplotlib.pyplot as plt
# 准备左侧卡片
left_card = (CardWidget()
.set_title("关键指标")
.add_metadata("用户增长", "+15%")
.add_metadata("收入", "+12%"))
# 准备右侧图表
plt.figure()
plt.plot([1, 2, 3], [4, 5, 2])
right_chart = ChartWidget().set_chart(plt)
# 创建2列布局并添加微件
two_column_layout = (ColumnWidget()
.set_columns(2)
.set_gap("24px")
.add_widget(left_card)
.add_widget(right_chart))
# 假设 email 是一个 Email 对象
# email.add_widget(two_column_layout)
初始化ColumnWidget。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
widget_id
|
Optional[str]
|
可选的Widget ID。 |
None
|
Functions¶
add_widget(widget)
¶
向列布局中添加一个微件。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
widget
|
BaseWidget
|
要添加的微件实例。 |
required |
Returns:
Name | Type | Description |
---|---|---|
ColumnWidget |
ColumnWidget
|
返回self以支持链式调用。 |
Examples:
add_widgets(widgets)
¶
向列布局中添加多个微件。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
widgets
|
List[BaseWidget]
|
要添加的微件实例列表。 |
required |
Returns:
Name | Type | Description |
---|---|---|
ColumnWidget |
ColumnWidget
|
返回self以支持链式调用。 |
Examples:
clear_widgets()
¶
get_current_columns()
¶
get_effective_columns()
¶
获取实际生效的列数。
如果设置为自动模式,则根据当前微件数量计算;否则返回手动设置的列数。
Returns:
Name | Type | Description |
---|---|---|
int |
int
|
实际使用的列数。 |
get_template_context()
¶
获取模板渲染所需的上下文数据
get_widget_count()
¶
is_auto_mode()
¶
remove_widget(widget_id)
¶
根据微件ID移除指定的微件。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
widget_id
|
str
|
要移除的微件的ID。 |
required |
Returns:
Name | Type | Description |
---|---|---|
ColumnWidget |
ColumnWidget
|
返回self以支持链式调用。 |
Examples:
remove_widget_by_index(index)
¶
移除指定索引的微件。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
index
|
int
|
要移除的微件的索引。 |
required |
Returns:
Name | Type | Description |
---|---|---|
ColumnWidget |
ColumnWidget
|
返回self以支持链式调用。 |
Raises:
Type | Description |
---|---|
IndexError
|
如果索引超出范围。 |
Examples:
set_columns(columns)
¶
设置列布局的列数。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
columns
|
int
|
列数。-1表示自动模式,其他值限制在1到4列之间。 |
required |
Returns:
Name | Type | Description |
---|---|---|
ColumnWidget |
ColumnWidget
|
返回self以支持链式调用。 |
Examples:
set_equal_width(equal=True)
¶
设置列是否等宽。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
equal
|
bool
|
是否等宽,默认为True。 |
True
|
Returns:
Name | Type | Description |
---|---|---|
ColumnWidget |
ColumnWidget
|
返回self以支持链式调用。 |
Note
此方法目前仅为预留接口,实际渲染中列宽始终等分。
Examples:
set_gap(gap)
¶
设置列之间的水平间距。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
gap
|
str
|
CSS间距值,如 "20px", "1em"。 |
required |
Returns:
Name | Type | Description |
---|---|---|
ColumnWidget |
ColumnWidget
|
返回self以支持链式调用。 |
Examples: