Как перезапустить определение, используя da sh plotly Tab da sh core component - PullRequest
0 голосов
/ 27 февраля 2020

относительно этого документа https://dash.plot.ly/dash-core-components/tabs ...

, связанного с кодом ниже:

import dash
import dash_html_components as html
import dash_core_components as dcc
import GUI

from dash.dependencies import Input, Output

app = dash.Dash(__name__)

tabs_styles = {
    'height': '44px'
}
tab_style = {
    'borderBottom': '1px solid #d6d6d6',
    'padding': '6px',
    'fontWeight': 'bold'
}

tab_selected_style = {
    'borderTop': '1px solid #d6d6d6',
    'borderBottom': '1px solid #d6d6d6',
    'backgroundColor': '#119DFF',
    'color': 'white',
    'padding': '6px'
}

app.layout = html.Div([
    dcc.Tabs(id="tabs-styled-with-inline", value='tab-1', children=[
        dcc.Tab(label='Tab 1', value=GUI.my_gui(), style=tab_style, selected_style=tab_selected_style),
        dcc.Tab(label='Tab 2', value='tab-2', style=tab_style, selected_style=tab_selected_style),
    ], style=tabs_styles),
    html.Div(id='tabs-content-inline')
])

@app.callback(Output('tabs-content-inline', 'children'),
              [Input('tabs-styled-with-inline', 'value')])
def render_content(tab):
    if tab == 'tab-1':
        return GUI.my_gui()
    elif tab == 'tab-2':
        return html.Div([
            html.H3('Tab content 2')
        ])

if __name__ == '__main__':
    app.run_server(debug=True)

Я хочу вернуть файл, как показано ниже при нажатии на вкладку:

import dash
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd
from sqlalchemy import create_engine
import datetime
from datetime import datetime as dt
from dash.dependencies import Input, Output
import plotly.graph_objs as go
import plotly.express as px
import hypothesis
import pytest
import base64

# 'LRRCConnReqAtt',
def my_gui():
    SHOW_COLUMNS1 = [
        'lrrc_re_est_succ',
        'cell_dl_max_throughput'
    ]

    SHOW_COLUMNS2 = [
        'interfreq_success_rate_4g',
        'intrarat_ho_success_rate'
    ]

    SHOW_COLUMNS3 = [
        'rcc_setup_success_rate',
        'interfreq_success_rate_4g'
    ]

    SHOW_COLUMNS4 = [
        'cell_downlink_average_throughput'
    ]

    """SHOW_COLUMNS5 = [
        'cell_downlink_average_throughput'
    ]"""

    engine = create_engine(
        '......')
    connection = engine.connect()

    external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

    app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

    lte_kpis = pd.read_sql('SELECT * FROM [myDB].[dbo].[lte_details]', engine)
    pd.set_option('display.max_columns', 10000)
    print(lte_kpis)
    lte_kpis.set_index('date', inplace=True)

    pd.set_option('display.max_columns', 350)
    pd.set_option('display.width', 1000)

    availble_cell = lte_kpis['cell_name'].unique()

    # availble_cell = lte_kpis.unique(lte_kpis[['date', 'Site Name', 'Cell CI', 'Cell LAC']].values.ravel('K'))


    plots = []
    app.layout = html.Div([
        html.Div([
            html.Div([
                html.H5(
                    ' Huawei Rotterdam_5 Dashbord',
                    style={
                        'marginBottom': 30,
                        'padding': '6px 0px 0px 8px'
                    }
                ),
            ], className="six columns"),
        ], className="row",
            style={
                'padding-right': 200

            },
        ),
        html.Div([
            html.Div([
                html.Div([
                    html.Label('Choose the "Cell-Name"'),
                    dcc.Dropdown(
                        id='cell-name-xaxis-column',
                        options=[{'label': i, 'value': i} for i in availble_cell],
                        value=availble_cell[0]
                    ),
 .....
                ], className="six columns"),
            ], className="row"),
            html.Div([
                html.Div([
                    dcc.Dropdown(
                        id='yaxis-columns3',
                        options=[{'label': col, 'value': col} for col in SHOW_COLUMNS3],
                        multi=True,
                        disabled=True,
                        value=[SHOW_COLUMNS3[0], SHOW_COLUMNS3[1]]
                    ),
                    dcc.Graph(
                        style={'height': 350},
                        id='my-graph3'
                    ),
                ], className="six columns"),
                html.Div([
                    dcc.Dropdown(
                        id='yaxis-columns4',
                        options=[{'label': col, 'value': col} for col in SHOW_COLUMNS4],
                        multi=True,
                        disabled=True,
                        value=[SHOW_COLUMNS4[0]]
                    ),
                    dcc.Graph(
                        style={'height': 350},
                        id='my-graph4'
                    ),
                ], className="six columns"),
            ], className="row"),
        ]),

    ])


    @app.callback(
        Output(component_id='my-graph', component_property='figure'),
        [Input(component_id='cell-name-xaxis-column', component_property='value'),
         Input(component_id='yaxis-columns', component_property='value'),
         Input(component_id='date-picker-range', component_property='start_date'),
         Input(component_id='date-picker-range', component_property='end_date')])
    def update_graph(cell_name, yaxis_cols, start_date, end_date):
        if not isinstance(yaxis_cols, list):
            yaxis_cols = [yaxis_cols]
        print(yaxis_cols)
        print((start_date, end_date))

.......

    @app.callback(
        Output(component_id='my-graph4', component_property='figure'),
        [Input(component_id='cell-name-xaxis-column', component_property='value'),
         Input(component_id='yaxis-columns4', component_property='value'),
         Input(component_id='date-picker-range', component_property='start_date'),
         Input(component_id='date-picker-range', component_property='end_date')])
    def update_graph(cell_name, yaxis_cols, start_date, end_date):
        if not isinstance(yaxis_cols, list):
            yaxis_cols = [yaxis_cols]
        print(yaxis_cols)
        print((start_date, end_date))

        sql_statement = "SELECT date, %s FROM [MyNewDatabase].[dbo].[lte_details] WHERE ([cell_name]='%s' AND [date]>='%s' AND [date]<='%s')" \
                        % (SHOW_COLUMNS4[0], cell_name, start_date, end_date)
        df = pd.read_sql(sql_statement, engine)

        scatters = []

        for col in yaxis_cols:
            if col == 'lrrc_conn_req_att':
                scatters.append(go.Bar(
                    x=df['date'],
                    y=df[col],
                    mode='lines',
                    name=col
                ))
            else:
                scatters.append(go.Scatter(
                    x=df['date'],
                    y=df[col],
                    name=col
                ))

        figure = {
            'data': scatters,
        }

        return figure


    if __name__ == '__main__':
        app.run_server(debug=True, use_debugger=True)

Когда я пытаюсь нажать на вкладку, возвращается пустая страница ...

Как с этим справиться, как с возвратом def?

Есть ли способ прочитать файл .py и показать содержимое на вкладке?

...