PythonDash:重复回调输出错误多页应用程序

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

这是我第一次使用Python和Dash,我想知道我在应用程序上做错了什么。 我创建了一个读取SQL的内容的数据框,一切正常。 我有一个多个页面应用程序,一切都在扑灭,直到我添加了此页

#setting up variables
CellaSelezionata = 'A1'
PAGE_SIZE = 12
#dizionario per cambio stringa in numero per filtro tabella
manidict = ['A1','A2','A3','B1','B2','B3','B4','C1','C2','C3','C4','D1','D2','D3','D4']
indexdict = [1,2,3,5,6,7,8,9,10,11,12,13,14,15,16]

#grafica applicazione
dash.register_page(__name__)

layout = html.Div(
    children = [
    html.Div(children=[
   #impostazione del filtro data per il grafico
    html.Div(
        children=[
            html.Div(
                children=[
            html.Div(
                children="Selezione Data", className="menu-title"
            ),
            dcc.DatePickerRange(
                id="date-range",
                min_date_allowed=data.PlcLogDT.min().date(),
                max_date_allowed=data.PlcLogDT.max().date(),
                start_date=data.PlcLogDT.min().date(),
                end_date=data.PlcLogDT.max().date(),
            ),
            html.Div(
                children="Selezione Cella", className="menu-title"
            ),
            dcc.Dropdown(
                id="CellSelect",
                options=[
                {'label': 'A1', 'value' : 'A1'},
                {'label': 'A2', 'value' : 'A2'},
                {'label': 'A3', 'value' : 'A3'},
                {'label': 'B1', 'value' : 'B1'},
                {'label': 'B2', 'value' : 'B2'},
                {'label': 'B3', 'value' : 'B3'},
                {'label': 'B4', 'value' : 'B4'},
                {'label': 'C1', 'value' : 'C1'},
                {'label': 'C2', 'value' : 'C2'},
                {'label': 'C3', 'value' : 'C3'},
                {'label': 'C4', 'value' : 'C4'},
                {'label': 'D1', 'value' : 'D1'},
                {'label': 'D2', 'value' : 'D2'},
                {'label': 'D3', 'value' : 'D3'},
                {'label': 'D4', 'value' : 'D4'},
                ],
                searchable= True,
                clearable= False,
                persistence = True,
                placeholder= 'Selezionare una Cella...',
                value= 'A1'
            ),
        ],
                className="menu",
            ),
            html.Div(children=[
            html.Div(
                children=[
                    html.Div(
                        children=dcc.Graph(
                            id='trend',
                            config={"displayModeBar": True,
                                    },
                        ),
                        className="card",
                    ),
                ],
                className="wrapper",
            ),
            html.Div(
                children=[
                    html.Div(
                        children=dash_table.DataTable(
                            id='manitable',
                            columns =[
                                {"name": i,"id" : i} for i in (auxMani.columns)
                            ],
                            page_current = 0,
                            page_size = PAGE_SIZE,
                            page_action = 'custom'
                        ),
                    ),
                ],
                className="wrapper",
            ),
            ],
            className="Grafici",
            ),
        ],
        style= {'float' : 'left', 'margin-left' : '200px'},
        className="ContainerDx"
    ),
    ]),
],
)

目的是在我从datepikerrange或下拉列表中搅动事物时更新表和图。所以我做了一个回调:

dash.callback(
            Output(component_id='manitable',component_property= 'data'),
            Output(component_id='trend',component_property= 'figure'),
        [
            Input('manitable', "page_current"),
            Input('manitable', "page_size"),
            Input(component_id="date-range",component_property= "start_date"),
            Input(component_id="date-range",component_property= "end_date"),
            Input(component_id="CellSelect",component_property= "value")
        ],
)
def update_table(page_current,page_size,start_date, end_date,CellaSelezionata):
    auxMani.sort_values('plclogdt')
    masktime = (
            (auxMani.PlcLogDT >= start_date)
            & (auxMani.PlcLogDT <= end_date)
    )
    for i in range(15):
        if manidict[i] == CellaSelezionata:
            idchamb = i

    filtered_data1 = auxMani.loc[masktime, :]
    filtered_data2 = filtered_data1.loc[filtered_data1.ChamberNo == indexdict[idchamb]]

    # selezione del dataframe in base al dataframe
    if CellaSelezionata == 'A1':
        df = A1
    elif CellaSelezionata == 'A2':
        df = A2
    elif CellaSelezionata == 'A3':
        df = A3
    elif CellaSelezionata == 'B1':
        df = B1
    elif CellaSelezionata == 'B2':
        df = B2
    elif CellaSelezionata == 'B3':
        df = B3
    elif CellaSelezionata == 'B4':
        df = B4
    elif CellaSelezionata == 'C1':
        df = C1
    elif CellaSelezionata == 'C2':
        df = C2
    elif CellaSelezionata == 'C3':
        df = C3
    elif CellaSelezionata == 'C4':
        df = C4
    elif CellaSelezionata == 'D1':
        df = D1
    elif CellaSelezionata == 'D2':
        df = D2
    elif CellaSelezionata == 'D3':
        df = D3
    elif CellaSelezionata == 'D4':
        df = D4

    data = (df.iloc[:, [1, 8, 9, 10]])
    # print(TrendCella)
    data.sort_values('plclogdt')

    # maschera per filtrare i dati
    mask = (
            (data.PlcLogDT >= start_date)
            & (data.PlcLogDT <= end_date)
    )
    filtered_data = data.loc[mask, :]

    trend_cella_visualizzazione = {
        "data": [
            {"x": filtered_data["plclogdt"], "y": filtered_data["cls_setpointtemp"] + 4, "name": "Set-Point",
             "type": "lines", "colorway": ["#17B897"]},
            {"x": filtered_data["plclogdt"], "y": filtered_data["cls_temp1"], "name": "Temperatura", "type": "lines",
             "colorway": ["#DC3912"]},
        ],
        "layout": {
            "title": {
                "text": "Temperatura della Cella di maturazione " + CellaSelezionata,  # [11:],
                "xanchor": "center",
            },
            "yaxis": {
                "ticksuffix": " °C"},
            "x": 1,
            # "colorway": ["#17B897"],
            # "colorway": ["#DC3912"],
        },
    }

    return filtered_data2.iloc[page_current*page_size:(page_current+1)*page_size].to_dict('records'), trend_cella_visualizzazione

问题是在运行应用程序时会遇到这个两个错误。 Callbacks Errors

我正在阅读文档,但我找不到任何有帮助的文档。

有人可以弄清楚我在做什么错吗? 谢谢你

唯一的事情是,如果我创建一个页面应用程序,则该代码将在没有问题的情况下运行,因此我可能会错过有关乘法项目的一些信息。

I有同样的问题,我所有的输出都在乘法上下文中产生了

Duplicate callback output
python callback plotly-dash
1个回答
0
投票
解决它

app = dash.get_app() # ... @app.callback( ...

Just

@callback( ...
    

© www.soinside.com 2019 - 2025. All rights reserved.