破折号模式弹出切换代码不起作用
Dash modal popup toggle code isn't working
我在我的 dash 应用程序中使用模式弹出窗口。在布局中,我定义了 2 个按钮。一
Opens
模态和另一个 Closes
它。我参考了文档中的示例并使用了稍微不同的代码来监听每个按钮。
关闭 Modal 后,我想调用一个函数和 运行 其他一些代码行。但是,我似乎听不到关闭按钮的点击。
# Modal buttons - layout code
dbc.Button("Add", id="open-btn"),
dbc.Button("Close", id="close-btn")
# Callbacks
# Modal toggle
@app.callback(Output("modal-2", "is_open"),
[
Input("open-btn", "n_clicks"),
Input("close-btn", "n_clicks")
],
[
State("Address", "value"),
State("City","value"),
State("Zip","value"),
State("State","value"),
State("modal-2", "is_open")
],
)
def add_prop(open_btn, close_btn, address, city, zip, state, is_open):
if open_btn:
return not is_open
## This code doesn't work
if close_btn:
print("Call function")
append_prop(tenant, industry, address, city, zip, state)
return is_open
我想弄清楚为什么关闭弹出代码块不起作用。
发生的事情是 open_btn
,它基于该组件的 n_clicks
属性,起始值为 0
。当用户单击该按钮时,它会递增并触发回调,open_btn
的值为 1
。该道具将保留未来调用您的回调的价值。因此,当关闭按钮触发回调时,open_btn
的值仍然为 1
,第一个 if
语句的计算结果为 True
.
解决这个问题的方法是 callback_context
def add_prop(open_btn, close_btn, address, city, zip, state, is_open):
ctx = dash.callback_context
if not ctx.triggered:
button_id = 'No clicks yet'
else:
button_id = ctx.triggered[0]['prop_id'].split('.')[0]
现在您可以检查 button_id
的值,看看是打开按钮还是关闭按钮导致回调触发,然后执行代码的正确部分。
我在我的 dash 应用程序中使用模式弹出窗口。在布局中,我定义了 2 个按钮。一
Opens
模态和另一个 Closes
它。我参考了文档中的示例并使用了稍微不同的代码来监听每个按钮。
关闭 Modal 后,我想调用一个函数和 运行 其他一些代码行。但是,我似乎听不到关闭按钮的点击。
# Modal buttons - layout code
dbc.Button("Add", id="open-btn"),
dbc.Button("Close", id="close-btn")
# Callbacks
# Modal toggle
@app.callback(Output("modal-2", "is_open"),
[
Input("open-btn", "n_clicks"),
Input("close-btn", "n_clicks")
],
[
State("Address", "value"),
State("City","value"),
State("Zip","value"),
State("State","value"),
State("modal-2", "is_open")
],
)
def add_prop(open_btn, close_btn, address, city, zip, state, is_open):
if open_btn:
return not is_open
## This code doesn't work
if close_btn:
print("Call function")
append_prop(tenant, industry, address, city, zip, state)
return is_open
我想弄清楚为什么关闭弹出代码块不起作用。
发生的事情是 open_btn
,它基于该组件的 n_clicks
属性,起始值为 0
。当用户单击该按钮时,它会递增并触发回调,open_btn
的值为 1
。该道具将保留未来调用您的回调的价值。因此,当关闭按钮触发回调时,open_btn
的值仍然为 1
,第一个 if
语句的计算结果为 True
.
解决这个问题的方法是 callback_context
def add_prop(open_btn, close_btn, address, city, zip, state, is_open):
ctx = dash.callback_context
if not ctx.triggered:
button_id = 'No clicks yet'
else:
button_id = ctx.triggered[0]['prop_id'].split('.')[0]
现在您可以检查 button_id
的值,看看是打开按钮还是关闭按钮导致回调触发,然后执行代码的正确部分。