我正在嘗試將已編輯的 Python Dash DataTable 存盤到帶有按鈕組件的 dcc.store 容器中,并在稍后使用保存的資料。但是,一旦我更改了原始 DataTable,存盤的容器也會更改。我找到了以下帖子(將修改后的破折號資料表保存到資料框)但無法弄清楚。
我的核心問題是如何在 Python dash 應用程式中存盤(復制)一些資料,然后在不更改存盤副本的情況下操作原始資料。
# Libraries
import pandas as pd
import dash
from dash import html, dash_table
import dash_core_components as dcc
from dash.dependencies import Input, Output
# Data
test_data = pd.DataFrame([[1,2],[3,4]], columns=['Col1', 'Col2'])
saved_test_data = None
# App
app = dash.Dash(__name__)
app.layout = html.Div(children=[dash_table.DataTable(columns = [{"name": i, "id": i} for i in test_data.columns],
data = test_data.to_dict('records'),
id = 'test_data_table',
editable=True,
),
html.Button('Save data', id='save_test_data', n_clicks=0),
dcc.Store(id = 'test_data_store'),
dash_table.DataTable(id = 'check_table', data=saved_test_data),
],
style={'width': '50%', 'display': 'inline-block', 'padding-left':'25%', 'padding-right':'25%'}
)
# Callbacks
@app.callback(Output('test_data_store', 'data'),
[Input('save_test_data', 'n_clicks'), Input('test_data_table', 'data')])
def save_test_data(n, data):
if n == 0:
saved_test_data = None
else:
saved_test_data = data
return saved_test_data
@app.callback(Output('check_table', 'data'),
Input('test_data_store', 'data'))
def restore_saved_test_data(data):
return data
if __name__ == '__main__':
app.run_server(debug=True, use_reloader=False)
如果我在按下按鈕后更改上表中的值,下表也會更改,但它應該顯示單擊之前保存的值,即
- 原始表

按下按鈕保存表格。
存盤的表應顯示在下方

- 更改上表不應該在再次點擊按鈕之前更改下表,但它會立即更改。
uj5u.com熱心網友回復:
有兩個問題。首先,您將原始表作為Input,每次更改時都會觸發回呼。這應該是一個State,
State('test_data_table', 'data')
其次,如果您進行上述更改,可能并不那么重要,是這種情況,if n == 0:. 這將始終False在單擊按鈕后進行。從那里,每次表格更新。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/463014.html
上一篇:顫振的wpapi
下一篇:php中的json多重選擇器
