【Dash】在回调的时候如何实现多个Output

参考自:Multiple-Outputs-in-Dash-Now-Available

Features(特性)

  • Use a list/tuple of Output as output in callbacks.
  • Return a tuple/list of value from the callbacks
    • The returned list must have the same length as the list of output (返回和声明Output的个数应该相同)
    • The output props are applied in the order they were declared in the output list(应该按照声明顺序返回)

代码

import dash
import dash_core_components as dcc
import dash_table as dt
import dash_html_components as html

from dash.dependencies import Output, Input
from dash.exceptions import PreventUpdate

import plotly.graph_objs as go

sample_data = {
    'series': {
        'data': [
            {'title': 'Game of Thrones', 'score': 9.5},
            {'title': 'Stranger Things', 'score': 8.9},
            {'title': 'Vikings', 'score': 8.6}
        ],
        'style': {
            'backgroundColor': '#ff998a'
        }
    },
    'movies': {
        'data': [
            {'title': 'Rambo', 'score': 7.7},
            {'title': 'The Terminator', 'score': 8.0},
            {'title': 'Alien', 'score': 8.5}
        ],
        'style': {
            'backgroundColor': '#fff289'
        }
    }
}

app = dash.Dash(__name__)

app.layout = html.Div([
    html.H1('Multi output example'),
    dcc.Dropdown(id='data-dropdown', options=[
        {'label': 'Movies', 'value': 'movies'},
        {'label': 'Series', 'value': 'series'}
    ], value='movies'),
    html.Div([
        dcc.Graph(id='graph'),
        dt.DataTable(id='data-table', columns=[
            {'name': 'Title', 'id': 'title'},
            {'name': 'Score', 'id': 'score'}
        ])
    ])
], id='container')

#在此声明output
@app.callback([
    Output('graph', 'figure'),
    Output('data-table', 'data'),
    Output('data-table', 'columns'),
    Output('container', 'style')
], [Input('data-dropdown', 'value')])
def multi_output(value):
    if value is None:
        raise PreventUpdate

    selected = sample_data[value]
    data = selected['data']
    columns = [
        {'name': k.capitalize(), 'id': k}
        for k in data[0].keys()
    ]
    figure = go.Figure(
        data=[
            go.Bar(x=[x['score']], text=x['title'], name=x['title'])
            for x in data
        ]
    )
    #在此返回output
    return figure, data, columns, selected['style']


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

效果

更改了图、数据及其样式

在此之前,大家都是通过def 多个function来实现对多个Output的操作。

除此之外,官方文档里还有一个案例,但是我没怎么看懂,附上地址https://dash.plot.ly/state,最下面。

说是return dash.no_update, '{} is prime!'.format(num),dash.no_update

  • # dash.no_update prevents any single output updating
  • # (note: it's OK to use for a single-output callback too)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python Dash中,可以使用回调装饰器来调用自身函数(self)。回调装饰器是一种装饰器模式,在Dash应用程序中使用它可以简化代码,增加可读性和可维护性。 当我们需要在Dash应用程序中使用回调函数时,可以使用`@app.callback`装饰器来定义回调函数,并将其与对应的输入和输出组件进行绑定。 首先,我们需要导入Dash库和回调装饰器: ``` import dash from dash.dependencies import Input, Output ``` 然后,创建Dash应用程序的实例: ``` app = dash.Dash(__name__) ``` 接下来,我们可以使用回调装饰器来定义回调函数。例如,我们定义一个简单的文本框和输出组件,当用户在文本框中输入内容时,输出组件会实时更新为输入的内容: ``` @app.callback( Output('output', 'children'), [Input('input', 'value')] ) def update_output(value): return value ``` 在上述示例中,`@app.callback`装饰器将`update_output`函数绑定到名为`output`的输出组件和名为`input`的输入组件上。`value`参数代表输入组件的值,`update_output`函数的返回值将作为输出组件的内容。 通过这种方式,我们可以在回调函数中调用自身函数。例如,我们可以在`update_output`函数中添加一些逻辑,根据输入的值进行判断并调用自身函数。 注意,为了防止无限递归调用,我们需要确保在适当的时候退出递归。可以使用条件语句或其他控制结构来实现这一点。 总而言之,Dash回调装饰器提供了一种方便的方式来定义和绑定回调函数。通过使用这些装饰器,我们可以在Dash应用程序中调用自身函数,并实现更复杂的交互功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值