Call back Button funktioniert nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
michel777
User
Beiträge: 5
Registriert: Montag 28. März 2022, 10:52

Hallo,

Die dft-Schleife funktioniert gut, aber der Callback "unterbricht" die Schleife nicht, die einzige debugged-Anweisung ist die def plot_ticker_day(n_clicks):

Idee ?

Der Code ist vereinfacht mit hart kodierten Werten: the_day='2021-10-14' , stocksTicker = 'GRVI'

Code: Alles auswählen

app = dash.Dash(__name__)
dft = pd.read_sql('SELECT * from show_rule1',con=Engine)
for row in dft.itertuples():
    app.layout = html.Div([
        html.H3(row.dayx),
        html.H3(row.Ticker),
        html.Button("Next",id='next_val'),
        dcc.Graph(id='ticker_day')
    ])
    @app.callback(
        Output('ticker_day', 'figure'),
        Input('next_val', 'n_clicks')
    )
    def plot_ticker_day(n_clicks):
        the_day='2021-10-14' 
        stocksTicker = 'GRVI'
        selectString = 'SELECT * FROM  aggregates WHERE Ticker =' +'\''+ stocksTicker +'\'' + ' AND CONVERT(varchar(10), dbo.aggregates.t_datetime, 23) =' +'\''+ the_day +'\''  
        df = pd.read_sql(selectString ,con=Engine)
        trace1 = {
            'x': df.t_datetime,
            'open': df.o,
            'close': df.c,
            'high': df.h,
            'low': df.l,
            'type': 'candlestick',
            'name': stocksTicker,
            'showlegend': True
        }
        fig=go.Figure([trace1])
        return fig
 
if __name__ == '__main__':
    app.run_server(debug=False)

__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist ein aus dem Zusammenhang gerissenes Stueck Code, ohne Importe, ohne Erklaerung, was da fuer Frameworks verwandt werden. Dazu kann man nichts sagen.
michel777
User
Beiträge: 5
Registriert: Montag 28. März 2022, 10:52

Vereinfacht, vollständig:

Code: Alles auswählen

import dash
import dash_html_components as html
import dash_core_components as dcc
import dash_bootstrap_components as dbc
from dash.dependencies import Output, Input
from pandas.core.frame import DataFrame
import plotly.graph_objects as go
import pandas as pd
from dash import Dash, dcc, html, Input, Output, State
from sqlalchemy import create_engine
import urllib
data = {'product_name': ['laptop', 'printer', 'tablet', 'desk', 'chair'],
        'price': [1200, 150, 300, 450, 200]
        }
dft = pd.DataFrame(data)
app = dash.Dash(__name__)
for row in dft.itertuples():
    app.layout = html.Div([
        html.H3(row.product_name),
        html.H3(row.price),
        html.Button("Next",id='next_val'),
        dcc.Graph(id='ticker_day')
    ])
    @app.callback(
        Output('ticker_day', 'figure'),
        Input('next_val', 'n_clicks')
    )
    def plot_ticker_day(n_clicks):
        fig = go.Figure(data=[go.Scatter(x=[1, 2, 3], y=[4, 1, 2])])
        return fig
if __name__ == '__main__':
    app.run_server(debug=False)
    
FranzB.
User
Beiträge: 1
Registriert: Dienstag 14. Juni 2022, 21:04

Hallo,
falls noch relevant. Hier wird Dash (for plotly) als Front end Framework genutzt. (https://dash.plotly.com/)
Was genau soll jetzt unterbrochen werden? Offensichtlich möchtest du mit dem Button den nächsten Plot anzeigen? Das zumindest lese ich aus dem "Input" im Callback raus. Das würde funktionieren, wenn der Callback nicht in der Schleife implementiert wäre. Den also einmal einen Tab zurück einrücken. Dann reagiert zumindest die Callback Funktion beim Klick des Buttons.
michel777
User
Beiträge: 5
Registriert: Montag 28. März 2022, 10:52

Hallo Franz,

viele Dank ! Problem wurde behoben.

VG Michel
Antworten