Dash dcc Input组件disabled属性行为与预期相反问题排查修复
问题原因及修复方案
问题原因
- 布尔属性类型错误:Dash组件的
disabled是布尔类型属性,必须传入Python原生的True/False,而非字符串"True"/"False"。你的代码中用了字符串值,导致Dash解析异常:- 初始设置
disabled="True":非布尔类型的字符串被Dash判定为False,所以输入框初始处于启用状态。 - 点击按钮后返回
"False":非空字符串被Dash判定为True,导致输入框被禁用。
- 初始设置
- 回调函数缺少初始返回值:当按钮未被点击(
clicks=0)时,你的回调函数没有返回值,无法维持输入框的初始禁用状态。
修复步骤
- 修正初始属性类型:将
dcc.Input的disabled参数改为布尔值True:dcc.Input(id="stock", placeholder="Please enter stock here", disabled=True) - 完善回调函数逻辑:确保回调函数在任何情况下都返回布尔值,实现初始禁用、点击启用的逻辑:
或者用更直观的分支写法:@callback( Output("stock", component_property="disabled"), Input("stock_y", "n_clicks") ) def enable(clicks): # 点击次数大于0时返回False(启用输入框),否则返回True(保持禁用) return clicks <= 0@callback( Output("stock", component_property="disabled"), Input("stock_y", "n_clicks") ) def enable(clicks): if clicks > 0: return False return True
内容的提问来源于stack exchange,提问作者Gignom
相关产品推荐
相关产品推荐

