Plotly Dash 回调依赖于未触发的另一个回调

问题描述 投票:0回答:0

我正在使用 Plotly Dash 创建仪表板。我想要多个选项卡,当用户点击任何特定选项卡时,相关回调被触发。

main.py
文件调用一个
layout.py
文件来生成布局。这是我将如何处理的代码片段。

def create_layout(app):
    
    @callback(Output("tab-output", "children"), Input("tab-input", "value"))
    def update_tab(tab):
        if tab == "tabname1":
            return my_individual_script.render(app)  # might work, might not
        elif tab == "tabname2":
            return f"You selected tab {tab}."  # works properly
    
    # 1st alternative (succeeds ✅)
    layout = html.Div(children=[
        dcc.Tabs(id="tabs-input", value="tabname1",
                 children=[dcc.Tab(label="foo", value="tabname1"), dcc.Tab(label="bar", value="tabname2")]),
        my_individual_script.render(app)
    ])
    
    # 2nd alternative (fails ❌)
    layout = html.Div(children=[
        dcc.Tabs(id="tab-input", value="tabname1",
                 children=[dcc.Tab(label="foo", value="tabname1"), dcc.Tab(label="bar", value="tabname2")]),
        html.Div(id="tab-output")
    ])
    return layout

我期待的/我尝试过的:

  1. 我希望
    update_tab
    调用正确的单独脚本来呈现该选项卡的所有内容。因此使用
    my_individual_script
    .
  2. “静态”成功的第一个替代方案从
    my_individual_script
    调用具有自己的回调的渲染函数。
  3. 如果选项卡名称正确,则失败的第二个选择仅调用
    my_individual_script
    。显然,这是期望的行为,因为我希望内容根据选项卡选择而改变。在这里,我放置一个 ID 为
    html.Div
    tab-output
    来触发
    update_tab
    。我认为它应该有效,因为我从
    tabname2
    .
  4. 得到了预期的行为
  5. 我已经尝试根据我对链式回调的微弱理解向
    Input("tab-output", "children")
    的回调提供
    my_individual_script
    ,但我不确定这是否适用于此,考虑到回调是基于父级中的
    if
    条件触发的打回来。它也不起作用。

这是

my_individual_script.py
中的代码,其回调在第二个备选方案中无法触发:

def render(app):
    @callback(Output("output-div", "children"), [Input("dropdown", "value")])
    def update_value(value):
        return f"You have selected {value}."

    div = html.Div(children=[
        dcc.Dropdown(["foo", "bar"], "foo", id="dropdown"),
        html.Br(),
        html.Div(id="output-div")
    ])
    return div

在这段代码中,初始化了一个带有两个选项的下拉菜单,我想做的就是打印出用户在下拉菜单下方的

html.Div
中选择的内容。这最终是我在第二个选择中写
div
时想要出现的
html.Div(id="tab-output")

问题是

my_individual_script
中的回调没有被触发。为什么当我尝试使用父回调的输出 ID 通过
html.Div
访问其内容时特别是这种情况?

是不是和我的回调依赖另一个回调有关,所以

dash
初始化的时候没看到?

如何允许基于用户单击的选项卡“动态”加载脚本?


对这里可能出现的任何语法错误表示歉意。我不得不从另一台计算机转录这段代码,所以这里的任何错误都不对应于我正在使用的代码中的语法错误。

我没有收到任何错误消息,因此很难在 StackOverFlow 或其他地方搜索与我的问题相对应的答案。

python callback tabs plotly-dash dashboard
© www.soinside.com 2019 - 2024. All rights reserved.