首页 > 解决方案 > 根据用户输入更新 plotly Dash dcc.Textarea 值

问题描述

我正在创建一个带有 dash 核心组件 (dcc.Textarea) 的文本区域的绘图 Dash 应用程序。最终用户希望保存来自文本区域的输入,以便下次用户进入更新该字段时可以重用它。我能够保存保存文本区域的内容,但是如何使用最新编辑更新该字段的默认值?我尝试更新文本区域的“价值”和“孩子”,但没有奏效。这是代码。

folder=r'C:\Temp'
def text_ar_val(file='TextBox1.txt'):
    with open(folder+fr'\Data\{file}','r') as f:
        return f.read()
app = dash.Dash(__name__)
app.layout = html.Div([dcc.Textarea(
                                id='textarea1', className='textarea1',
                                value=text_ar_val()
                            ),
                            html.Div(daq.StopButton(id='save1',className="button",
                                                    buttonText='Save', n_clicks=0))
                        ])
@app.callback(Output('textarea1', 'children'),
              [Input('save1', 'n_clicks'), Input('textarea1','value')])
def textbox1(n_clicks, value):
    if n_clicks>0:
        global folder
        with open(folder+r'\Data\TextBox1.txt','w') as file:
            file.write(value)
            return value

我也试过:

@app.callback(Output('textarea1', 'value'),
          [Input('save1', 'n_clicks'), Input('textarea1','value')])

标签: pythonplotly-dash

解决方案


dcc.Textarea 模块接受参数persistence 和persistence_type。设置 persistence=True 和 persistence_type='local'。将persistence 设置为True 将告诉应用程序保存最后输入的数据,将persistence_type 设置为'local' 会将最后输入的数据保存到window.localStorage。因此,当用户退出浏览器并返回时,该字段将具有上次输入数据的默认值。代码将是:

app.layout = html.Div([dcc.Textarea(
                                id='textarea1', className='textarea1',
                                value=text_ar_val(),
                                persistence=True, persistence_type='local'
                            ),
                            html.Div(daq.StopButton(id='save1',className="button",
                                                    buttonText='Save', n_clicks=0))
                        ])

这段代码前后的所有内容都保持不变。几乎所有其他 dcc 组件都将接受持久性和持久性类型的参数(例如 dcc.Dropdown)。

欲了解更多信息,您可以访问:

https://dash.plotly.com/dash-core-components/textarea


推荐阅读