Dash如何实现无需点击按钮即可触发callback自动刷新?
Dash输入框内容变更自动触发摘要刷新的解决方案
你之前直接将full-input-boxes的children属性从State改为Input不生效,核心原因是children属性仅跟踪容器内的组件结构变化,只有增删输入框、修改输入框属性(非value输入内容)才会触发该属性更新,用户修改输入框内的文本不会触发children变动,因此回调不会运行。
根据你的输入框生成方式,可选择以下两种方案实现需求:
方案1:动态输入框场景(推荐)
如果你的输入框是动态生成的,使用Dash自带的模式匹配回调即可实现所有输入框值变更触发回调,步骤如下:
- 调整动态生成输入框的id配置,给所有输入框设置统一标识的字典id:
# 示例:你动态生成输入框的逻辑调整id写法 for idx in range(你的输入框数量): dcc.Input( id={"type": "summary-input", "index": idx}, value="", debounce=300 # 可选:输入停止300ms后再触发回调,避免频繁运算 )
- 改写回调配置,移除按钮的
Input,替换为匹配所有输入框值的Input:
from dash.dependencies import Input, Output, ALL @app.callback( Output('desc', 'children'), Input({"type": "summary-input", "index": ALL}, "value"), prevent_initial_call=False # 初始加载时自动触发可保留,否则设为True ) def refresh_desc(input_values): txt = "" # input_values是所有输入框内容按顺序组成的列表,直接处理即可 for val in input_values: if val: # 替换为你自己的摘要生成逻辑 txt += val + "\n" return txt
方案2:固定数量输入框场景
如果输入框是提前写死的固定数量,直接把所有输入框的value属性作为回调的Input即可:
@app.callback( Output('desc', 'children'), Input("输入框1的id", "value"), Input("输入框2的id", "value"), # 有多少个输入框就加多少个Input prevent_initial_call=False ) def refresh_desc(val1, val2): # 处理输入值生成摘要 return 处理后的摘要文本
内容的提问来源于stack exchange,提问作者erixliechtenstein
相关产品推荐
相关产品推荐

