下面的代码从CSV文件中读取一个简单的模型(3列50行),以便在我的(更大的)破折号应用程序中编辑表。编辑单元格时,会按预期将整个表写回文件。但是,重新加载页面会显示表,因为它最初是从文件中加载的,因此丢失了任何编辑。有关于如何在页面重新加载之间保持编辑的线索吗?
df_topic_list=pd.read_csv(model_file)
app.layout = html.Div([
dcc.Store(id='memory-output'),
html.Div([
dash_table.DataTable(df_topic_list.to_dict('records'),
id='memory-table',
columns=[{"name": i, "id": i} for i in df_topic_list.columns],editable=True
),
])
])
@app.callback(Output('memory-output', 'data'),
Input('memory-table', 'data'))
def on_data_set_table(data):
pd.DataFrame(data).to_csv(model_file,index=False)
return data
app.run_server(port=8052)发布于 2022-03-28 15:55:40
当您刷新页面时,它不会再次运行所有代码,但它只会再次发送app.layout,它只生成一次,其中包含来自文件的原始数据。当您更新表格中单元格中的数据时,它只更新浏览器中的值(使用JavaScript),而不更新代码app.layout中的值。
但是它可以选择在浏览器内存中预置值,并且它应该在重新加载后使用这些值。
app.layout = html.Div([
dcc.Store(id='memory-output'),
html.Div([
dash_table.DataTable(
df_topic_list.to_dict('records'),
id='memory-table',
columns=[{"name": i, "id": i} for i in df_topic_list.columns],
editable=True,
persistence=True, # <---
persisted_props=["data"], # <---
)
])
])这对我有用,但似乎有些人对此有意见。
见问题:Dash表编辑的数据不持久化.问题#684 .巧妙/破折号表
但我找到了其他方法来保存它。
我把表分配给分开的变量--即.table --在回调中,我在这个表中替换了table.data。
from dash import Dash, Input, Output, callback
from dash import dcc, html, dash_table
import pandas as pd
model_file = 'data.csv'
df_topic_list = pd.read_csv(model_file)
app = Dash(__name__)
table = dash_table.DataTable(
df_topic_list.to_dict('records'),
id='memory-table',
columns=[{"name": i, "id": i} for i in df_topic_list.columns],
editable=True,
)
app.layout = html.Div([
dcc.Store(id='memory-output'),
html.Div([table])
])
@app.callback(
Output('memory-output', 'data'),
Input('memory-table', 'data')
)
def on_data_set_table(data):
pd.DataFrame(data).to_csv(model_file, index=False)
table.data = data # <--- replace data
return data
app.run_server(port=8052)https://stackoverflow.com/questions/71637511
复制相似问题