dash 中的模式匹配回调函数Pattern-Matching Callbacks 8

模式匹配

模式匹配回调选择器 MATCH、ALL 和 ALLSMALLER 允许您编写可以响应或更新任意或动态数量组件的回调函数。

此示例呈现任意数量的 dcc. Dropdown 元素,并且只要任何 dcc. Dropdown 元素发生更改,就会触发回调。尝试添加几个下拉菜单并选择它们的值,以查看应用程序如何更新。

效果:

代码

python 复制代码
# 导入Dash库及其相关组件  
from dash import Dash, dcc, html, Input, Output, ALL, Patch, callback

# 创建一个Dash应用实例  
app = Dash(__name__)

# 设置应用的布局  
app.layout = html.Div(
    [
        # 添加一个按钮,用于添加过滤器,id为"add-filter-btn",并设置初始点击数为0  
        html.Button("添加过滤器", id="add-filter-btn", n_clicks=0),
        # 创建一个div容器,用于存放下拉菜单组件,id为"dropdown-container-div",初始子元素为空  
        html.Div(id="dropdown-container-div", children=[]),
        # 创建一个div容器,用于显示下拉菜单的选择结果,id为"dropdown-container-output-div"  
        html.Div(id="dropdown-container-output-div"),
    ]
)


# 定义一个回调函数,当"add-filter-btn"按钮被点击时触发
@callback(
    # 设置输出目标为"dropdown-container-div"的子元素  
    Output("dropdown-container-div", "children"),
    # 设置输入源为"add-filter-btn"的点击事件  
    Input("add-filter-btn", "n_clicks")
)
def display_dropdowns(n_clicks):
    # 创建一个Patch对象,用于存放新的下拉菜单组件  
    patched_children = Patch()
    # 创建一个新的下拉菜单组件,包含四个城市选项,id根据点击次数动态生成  
    new_dropdown = dcc.Dropdown(
        ["NYC", "MTL", "LA", "TOKYO"],
        id={"type": "city-filter-dropdown", "index": n_clicks},
    )
    # 将新的下拉菜单组件添加到Patch对象中  
    patched_children.append(new_dropdown)
    # 返回Patch对象,更新"dropdown-container-div"的子元素  
    return patched_children


# 定义一个回调函数,当下拉菜单的值发生变化时触发
@callback(
    # 设置输出目标为"dropdown-container-output-div"的子元素  
    Output("dropdown-container-output-div", "children"),
    # 设置输入源为所有"city-filter-dropdown"类型的下拉菜单的值变化事件  
    Input({"type": "city-filter-dropdown", "index": ALL}, "value"),
)
def display_output(values):
    # 遍历所有下拉菜单的值,创建一个包含结果的div组件列表  
    return html.Div(
        [html.Div(f"下拉菜单 {i + 1} = {value}") for (i, value) in enumerate(values)]
    )


# 当脚本作为主程序运行时,启动Dash应用,并开启调试模式
if __name__ == "__main__":
    app.run(debug=True)

上一篇

相关推荐
Tipriest_5 天前
Ubuntu 中 Bash / Zsh / Ash / Dash 的使用与区别(含对比图)
ubuntu·bash·dash
计算机毕设残哥5 天前
【Spark+Hive+hadoop】人类健康生活方式数据分析
大数据·hive·hadoop·python·数据分析·spark·dash
大佬,救命!!!21 天前
整理python快速构建数据可视化前端的Dash库
python·信息可视化·学习笔记·dash·记录成长
费弗里21 天前
无需云服务器!通过Plotly Cloud免费快捷部署Dash应用
python·dash
计算机编程小央姐25 天前
数据安全成焦点:基于Hadoop+Spark的信用卡诈骗分析系统实战教程
大数据·hadoop·python·spark·毕业设计·课程设计·dash
计算机毕设残哥1 个月前
数据量太大处理不了?Hadoop+Spark轻松解决海洋气象大数据分析难题
大数据·hadoop·python·数据分析·spark·django·dash
司徒轩宇2 个月前
Dash 中的 dcc.Clipboard 组件详解:实现一键复制功能
dash
费弗里2 个月前
Python全栈应用开发神器fac 0.4.0新版本升级指南&更新日志
python·dash
费弗里2 个月前
Python全栈应用开发利器Dash 3.x新版本介绍(5)
python·dash
万粉变现经纪人2 个月前
如何解决pip安装报错ModuleNotFoundError: No module named ‘dash’问题
python·scrapy·pycharm·flask·pip·策略模式·dash