Python 仪表板模式弹出切换代码为';行不通

Python 仪表板模式弹出切换代码为';行不通,python,plotly,plotly-dash,Python,Plotly,Plotly Dash,我正在dash应用程序中使用模式弹出窗口。在布局中,我定义了两个按钮。一个 打开模式,另一个关闭模式。我在文档中引用了这个示例,并使用稍微不同的代码来侦听每个按钮 模式结束后,我想调用一个函数并运行其他代码行。然而,我似乎听不到关闭按钮的按钮点击 # Modal buttons - layout code dbc.Button("Add", id="open-btn"), dbc

我正在dash应用程序中使用模式弹出窗口。在布局中,我定义了两个按钮。一个
打开
模式,另一个
关闭
模式。我在文档中引用了这个示例,并使用稍微不同的代码来侦听每个按钮

模式结束后,我想调用一个函数并运行其他代码行。然而,我似乎听不到关闭按钮的按钮点击

            # 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\u btn
,它基于该组件的
n\u点击
属性,从值
0
开始。当用户单击该按钮时,它将递增,并使用值为
1
open\u btn
触发回调。该属性将保留将来调用回调的值。因此,当关闭按钮触发回调时,
open\u btn
仍然有一个值
1
,第一个
if
语句的计算结果为
True

解决这个问题的方法是使用

def add_prop(打开、关闭、地址、城市、邮政编码、州、是否打开):
ctx=dash.callback\u上下文
如果未触发ctx,则:
button_id='尚未单击'
其他:
按钮id=ctx。已触发[0]['prop_id']。拆分('.')[0]
现在,您可以检查
button\u id
的值,查看是打开还是关闭按钮导致回调触发,并执行代码的正确部分