范例:配置标记的颜色
配置标记颜色的范例 |
---|
查看以下链接,以阅览设置标记颜色的范例。
该范例提供了以下功能:
- 一个基础的
DashPictureAnnotation
,允许:- 透过拖拽的方式,创建、修改、或移除标记框。
- 使用文本输入框修改标记的文字标注。
- 每当标记数据改变时,数据的变化会反馈给标记器下方的文字。
- 三个控制按钮:
- 切换默认色(Toggle default color):用来在白色(
white
)与黑色(black
)之间切换当前默认色。 - 开关指定色(Toggle specific color):用来开启、关闭针对某些特定文字标注设置的对应颜色。
- 开关动态色(Toggle dynamic color):用来开启、关闭动态颜色计算。注意自动计算的颜色只会与文字标注值相关。
- 切换默认色(Toggle default color):用来在白色(
定义布局
相比最小范例,此处还有三个额外的按钮。
(
dpa.DashPictureAnnotation(...),
html.Div(
html.Button(
children="Toggle default color",
id="btn-default",
style=styles["mr1"],
),
html.Button(
children="Toggle specific color",
id="btn-specific",
style=styles["mr1"],
),
html.Button(
children="Toggle dynamic color",
id="btn-dynamic",
style=styles["mr1"],
),
),
)
这些按钮用来触发与颜色配置相关的callback。相比最小范例,本例中DashPictureAnnotation
的初始属性并不需要修改。
定义callback
第一个callback用来切换默认色。其读取之前配置的默认色,并在#000
和#fff
两值之间切换新的默认色。
@app.callback(
Output("annotator", "style_annotation"),
Input("btn-default", "n_clicks"),
State("annotator", "style_annotation"),
prevent_initial_call=True,
)
def toggle_default_color(n_clicks: Optional[int], style_annotation: Optional[str]):
if n_clicks:
if not isinstance(style_annotation, str):
return "#000"
if style_annotation == "#fff":
return "#000"
else:
return "#fff"
return dash.no_update
第二个callback用来开关指定色。其选中example_data
中的前三条文字标注,并分别为其附上标注对应的颜色。以下callback同样演示了如何使用不同的颜色格式。例如,hsl(180, 100%, 50%)
和cyan
或#0ff
都是等价的。
@app.callback(
Output("annotator", "colors"),
Input("btn-specific", "n_clicks"),
State("annotator", "colors"),
prevent_initial_call=True,
)
def toggle_specific_colors(
n_clicks: Optional[int], colors: Optional[Mapping[str, str]]
):
if n_clicks:
if colors:
return None
else:
return dict(
zip(
(ditem["comment"] for ditem in example_data["data"]),
("hsl(180, 100%, 50%)", "rgb(255, 0, 255)", "#ff0"),
)
)
return dash.no_update
最后的callback用来开关动态颜色功能。它的实现非常简单。唯一需要做的就是控制属性is_color_dynamic
。
@app.callback(
Output("annotator", "is_color_dynamic"),
Input("btn-dynamic", "n_clicks"),
State("annotator", "is_color_dynamic"),
prevent_initial_call=True,
)
def toggle_dynamic_color(n_clicks: Optional[int], is_color_dynamic: Optional[bool]):
if n_clicks:
return not bool(is_color_dynamic)
return dash.no_update