Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在收到新数据后替换划线/绘图表/或更新当前表_Python_Callback_Plotly Dash - Fatal编程技术网

Python 如何在收到新数据后替换划线/绘图表/或更新当前表

Python 如何在收到新数据后替换划线/绘图表/或更新当前表,python,callback,plotly-dash,Python,Callback,Plotly Dash,我想建立一个数据表,它可以随时更新。每次发生这种情况时,表都应该从csv文件中获取数据。为了做到这一点,我构建了一个生成并返回表的函数。在第二次更新之后,这是可行的-但是我生成的第一个表保留了下来,因此我最终得到了一个表,其中一个表执行我想要的操作,而另一个则保留了下来…: 这是我的代码: import random import dash from dash.dependencies import Input, Output, State import dash_table import

我想建立一个数据表,它可以随时更新。每次发生这种情况时,表都应该从csv文件中获取数据。为了做到这一点,我构建了一个生成并返回表的函数。在第二次更新之后,这是可行的-但是我生成的第一个表保留了下来,因此我最终得到了一个表,其中一个表执行我想要的操作,而另一个则保留了下来…:

这是我的代码:

import random
import dash
from dash.dependencies import Input, Output, State
import dash_table

import dash_html_components as html
import pandas as pd


df = pd.read_csv('.../dummy2_csv.csv')


def maketable(dataf):
    tab = html.Div([dash_table.DataTable(
                id='adding-rows-table',
                editable=True,
                data=dataf.to_dict('rows'),
                columns=[{'name': i, 'id': i} for i in dataf.columns])])
    return tab


app = dash.Dash(__name__)


app.layout = html.Div([
    html.Div(id='my-div'),
    maketable(df),
    html.Button('+', id='editing-rows-button', n_clicks=0),
    html.Button('update', id='btn-save', n_clicks=0)
])



@app.callback(
    Output(component_id='my-div', component_property='children'),
    [Input('btn-save', 'n_clicks'), Input('adding-rows-table', 'data')]
)
def update_output_div(n_clicks, data):
    changed_id = [p['prop_id'] for p in dash.callback_context.triggered][0]
    if 'btn-save' in changed_id:
        df2 = pd.DataFrame(data)

        for col in df2.columns:
            # new values
            df2[col].values[:] = random.randint(0,9)
        df2.to_csv('.../dummy2_csv.csv', encoding='utf-8', index=False)
        return maketable(df2)


@app.callback(
    Output('adding-rows-table', 'data'),
    [Input('editing-rows-button', 'n_clicks')],
    [State('adding-rows-table', 'data'),
     State('adding-rows-table', 'columns')])
def add_row(n_clicks, rows, columns):
    if n_clicks > 0:
        rows.append({c['id']: '' for c in columns})
    return rows


if __name__ == '__main__':
    app.run_server(debug=True)
提前感谢您的帮助


最好,t.

问题似乎是因为您调用了函数来在从回调接收表的
div
之外构建表。尝试将布局更改为:

app.layout=html.Div([
html.Div(id='my-Div',children=[maketable(df)],
按钮('+',id='editing-rows-Button',n_clicks=0),
按钮('update',id='btn-save',n_clicks=0)
])
我让它工作了

  • 问题出在回调函数中
检查:

import dash
from dash.dependencies import Input, Output, State
import dash_table
import dash_daq as daq
import dash_bootstrap_components as dbc
import dash_core_components as dcc
import dash_html_components as html
import pandas as pd


df = pd.read_csv('.../dummy2_csv.csv')

body = dbc.Container(
    [
        dbc.Row(
            [
                dash_table.DataTable(id="dash_neu", editable=True, row_deletable=True, columns=[{'name': i, 'id': i} for i in df.columns], data=df.to_dict('records')),
                dbc.Col(html.Button('+', id='editing-rows-button', n_clicks=0)),
                dbc.Col(html.Button('update', id='btn-save', n_clicks=0))
            ]
        )])

app = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])

app.layout = html.Div([body])


@app.callback(
    [dash.dependencies.Output("dash_neu", "data"), dash.dependencies.Output("dash_neu", "columns")],
    [Input("btn-save", "n_clicks"), Input('editing-rows-button', 'n_clicks')],
    [State('dash_neu', 'data'), State('dash_neu', 'columns')]
)
def update(button, clicked, data, columns):
    changed_id = [p['prop_id'] for p in dash.callback_context.triggered][0]
    if 'btn-save' in changed_id:
        df = pd.DataFrame(data)
        df.to_csv('.../dummy2_csv.csv', encoding='utf-8', index=False)
        columns = [{'name': i, 'id': i} for i in df.columns]
        data = df.to_dict('records')
        return data, columns
    if 'editing-rows-button' in changed_id:
        if clicked > 0:
             data.append({c['id']: '' for c in columns})
        return data, columns
    return data, columns

不幸的是,这不起作用:(但我会尝试包括你的帮助来修复它!-thx!很好地解决了它!你能包括一点更多的解释,你改变了什么,解决了这个问题?