【数据科学系列】基于Python的Web应用框架Dash-回调函数

基本的Dash回调

回调:Dash应用程序具有交互性

Dash应用布局

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output

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

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div([
    dcc.Input(id='my-id', value=u'初始值', type='text'),
    html.Div(id='my-div')
])


@app.callback(
    Output(component_id='my-div', component_property='children'),
    [Input(component_id='my-id', component_property='value')]
)
def update_output_div(input_value):
    return 'You\'ve entered "{}"'.format(input_value)


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

在文本框中输入内容,输出组件的子项随之立即更新。让我们分解这里发生的事情:

  1. 应用程序接口的“输入”和“输出”通过app.callback装饰器以声明方式描述。
  2. 在Dash中,我们的应用程序的输入和输出只是特定组件的属性。在此示例中,我们的输入是具有ID“ my-id” 的组件的“value”属性。我们的输出是具有ID“ my-div” 的组件的“children”属性。
  3. 每当输入属性发生更改时,将自动调用回调装饰器包装的函数。Dash为函数提供输入属性的新值作为输入参数,Dash使用函数返回的内容更新输出组件的属性。
  1. 不要将dash.dependencies.Input对象与 dash_core_components.Input对象混淆。前者仅用于这些回调,后者是实际组件。

Dash设置组件属性值的过程
当Dash应用程序启动时,它会自动使用输入组件的初始值调用所有回调,以填充输出组件的初始状态。在这个例子中,如果你指定了类似的东西html.Div(id=‘my-div’, children=‘Hello world’) ,它会在应用程序启动时被覆盖。

类似使用Microsoft Excel进行编程:每当输入单元格发生更改时,依赖于该单元格的所有单元格都将自动更新。这称为“反应式编程”(Reactive Programming)。

还记得每个组件是如何通过其关键字参数集完全描述的吗?那些属性现在很重要。通过Dash交互,我们可以通过回调函数动态更新任何这些属性。我们经常会更新该组件的children属性来显示新文本或dcc.Graph组成部分figure,以显示新的数据,但我们也可以更新style的组件,甚至可用一个的dcc.Dropdown的分量options!

dcc.Slider 更新 dcc.Graph

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output

import pandas as pd
import plotly.graph_objs as go

df = pd.read_csv(
    'https://raw.githubusercontent.com/plotly/'
    'datasets/master/gapminderDataFiveYear.csv')

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

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div([
    dcc.Graph(id='graph-with-slider'),
    dcc.Slider(
        id='year-slider',
        min=df['year'].min(),
        max=df['year'].max()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值