如何在 Dash Web 应用程序中使用“dash.properties.Synced”? | Python

Posted

技术标签:

【中文标题】如何在 Dash Web 应用程序中使用“dash.properties.Synced”? | Python【英文标题】:How can I use "dash.properties.Synced" in the Dash web app? | Python 【发布时间】:2021-09-23 23:37:45 【问题描述】:

我指的是this post,以便我可以使用来自 Dash Web 应用程序中不同选项卡的数据。 但我无法使用dash.properties.Synced 并收到错误AttributeError: module 'dash' has no attribute 'properties'

示例代码

import dash
import dash_html_components as html
import dash_core_components as dcc
import dash_daq as daq

from dash.dependencies import Input, Output, State

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.config["suppress_callback_exceptions"] = True

app.layout = html.Div([
    dcc.Store(id="num_output", storage_type='session',),
    dcc.Tabs(id='tabs-example', value='tab-1', children=[
        dcc.Tab(label='Tab one', value='tab-1'),
        dcc.Tab(label='Tab two', value='tab-2'),
    ]),
    html.Div(id='tabs-example-content')
])


@app.callback(Output('tabs-example-content', 'children'),
              Input('tabs-example', 'value'))
def render_content(tab):
    if tab == 'tab-1':
        return html.Div([
            html.H3('Tab content 1'),
            # dcc.Store(id="num_output", storage_type='local',),  # session, local
            html.Div(id="num_output2",),
            html.Div([daq.NumericInput(
                id="num_input",
                label='Vehicles',
                labelPosition='top',
                value=dash.properties.Synced(
                    id='store_model',
                    property='data',
                    default=4
                ),
            ), ], style='marginLeft': 20, 'marginRight': 20, 'width': '5%', 'display': 'inline-block'),

        ])
    elif tab == 'tab-2':
        return html.Div([
            html.H3('Tab content 2'),
            html.Div(id="num_output2",),
        ])


@app.callback(
    Output('num_output', 'data'),
    Input('num_input', 'value'))
def render_content(data):
    return data


@app.callback(
    Output('num_output2', 'children'),
    Input('num_output', 'modified_timestamp'),
    State('num_output', 'data'))
def render_content(ts, data):
    if data:
        return html.H4(f'out data')


if __name__ == '__main__':
    app.run_server(debug=True)

【问题讨论】:

【参考方案1】:

带有 dash.properties.Synced 的示例代码不是真正的 API,它是来自发帖人的虚构建议,作为帮助解决问题的可能方式。

我不知道有人将这个想法付诸实践。

可以通过使用全局和本地“存储”对象在选项卡之间共享状态,这些对象是您在从选项卡内更新时写入的对象,以及在选项卡上绘制内容时读取的对象。请参阅我在 original post

上描述这一点的尝试

【讨论】:

感谢您的回答。我猜你是“ncorran”。您能否分享一个示例代码来演示您的实现。这将帮助我理解这个概念。谢谢。

以上是关于如何在 Dash Web 应用程序中使用“dash.properties.Synced”? | Python的主要内容,如果未能解决你的问题,请参考以下文章

《Python开发 - Python库》Dash安装与使用 (构建Web应用的 Python 库)

vscode的dash插件使用方法

何时为 Web 应用程序使用 HLS 或 DASH 格式

Dash.js 播放器在调试时不播放

如何在 Dash/Plotly 应用程序中自动为多个图形添加回调

Plotly dash,更新 dash 应用程序 jinja 上的实时图形?