python - 如何在单击 Python Dash 的按钮上添加单独的 Html 元素
问题描述
我正在尝试使用 Python dash 来实现一个非常简单的场景。在每个按钮上添加相似的元素一个接一个地单击。
下面是代码。
app.layout = {
html.Button(id='add-element-button', n_clicks=0, children='Add Input Element'),
html.Div(id="layout")
}
@app.callback(Output('layout', 'children'),
[Input('add-element-button', 'n_clicks')])
def add_strategy_divison(val):
if val:
return html.Div(id=f"heading_element_{val}",
[
html.H1(id=f"heading_{val}", children=f"{val} Heading"),
]
)
else:
raise PreventUpdate
似乎正在发生的事情不是添加新元素,而是用新的标题元素和新的 id 覆盖第一个标题元素(在第一次点击时成功创建)。
有谁知道会发生什么?谢谢!
解决方案
您描述的行为非常合理。您返回一个新的 div 元素,这意味着您覆盖了布局元素的 children 属性。这样,您将始终替换现有的孩子。
为此,您需要获取布局元素的当前子元素并将新元素添加到其中。将当前子项作为State对象传递给您的回调。现在将您的元素附加到子元素并返回列表。
@app.callback(
Output('layout', 'children'),
[Input('add-element-button', 'n_clicks')],
[State('layout', 'children')],
)
def add_strategy_divison(val, children):
if val:
el = html.Div(id=f"heading_element_{val}", [
html.H1(id=f"heading_{val}", children=f"{val} Heading"),
])
children.append(el)
return children
else:
raise PreventUpdate
推荐阅读
- mysql - 通过select语句在insert语句中获取表名
- javascript - posenet:图像因人数而异
- microsoft-graph-api - Exchange ResolveNames 调用替换为 Graph
- javascript - 如何使用 Typescript 通过类型而不是接口对对象进行建模?
- python - python - 如何用python中的逗号替换列表中文本之间的空格?
- python - 如何在 python popen 中输出 Linux 命令
- alert - 创建警报时获取对象的空值
- javascript - burgerLines.map 不是函数
- python - 如何获取烧瓶中文件的类型?
- java - Java中的渗透-使用的数据结构