Yunindyo Prabowo

Wanna Be a Pythonist

Dash Plotly Advance Learn - CallBack

2021-06-23 yunindyo prabowopythondashplotlydata engineerdata

Pada tulisan sebelumnya, kita telah membahas sedikit mengenai dash, dan bagaimana cara menggunakan komponen-komponen html ataupun komponen dash untuk mendesain web yang menggunakan dash sebagai dasar frameworknya.

Di pembahasan kali ini, kita akan membahas mengenai callback, sebuah fungsi pada bahasa pemrograman python yang akan di panggil oleh dash untuk merubah properti komponen kapan pun properti komponen input itu berubah secara otomatis/Singkatnya, sebuah callback functions digunakan untuk merubah nilai atau memanipulasi layout komponen pada dash sehingga aplikasi yang kita buat dapat interaktif dengan interaksi user.

Simple Callback Example

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([
    html.H6("Change the value in the text box to see callbacks in action!"),
    html.Div(["Input: ",
              dcc.Input(id='my-input', value='initial value', type='text')]),
    html.Br(),
    html.Div(id='my-output'),

])


@app.callback(
    Output(component_id='my-output', component_property='children'),
    Input(component_id='my-input', component_property='value')
)
def update_output_div(input_value):
    return 'Output: {}'.format(input_value)


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

Pembahasan

Saat script diatas dijalankan maka tampilan yang akan muncul adalah sebagai berikut,

kemudian rubah input box yang ada dan lihat hasilnya.

input dan output didefinisikan dalam bentuk Syntactic Sugar atau yang biasa disebut sebagai decorator. Dalam contoh diatas, input merupakan nilai dari properti value dengan id my-input, sedangkan untuk output, merupakan nilai balikan yang akan dikembalikan kepada properti children dengan id my-output. Kapan pun nilai dari properti input berubah, fungsi callback akan selalu di panggil secara otomatis.

Dengan callback decorator yang di tentukan, kita dapat membuat aplikasi kita menjadi lebih interaktif dan dinamis apabila ada perubahan tampilan baik tulisan, gambar, grafik visualisasi, tabel dan sebagainya.

Contoh lain, kita akan menggunakan multi input dengan multi output untuk menghitung sisi miring segitiga, untuk contoh programmnya sebagai berikut,

from math import pow, sqrt
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='x',
        type='number',
        value=3,

    ),
    dcc.Input(
        id='y',
        type='number',
        value=4
    ),
    html.Table([
        html.Tr([html.Td(['a', html.Sup(2)]), html.Td(id='a-square')]),
        html.Tr([html.Td(['b', html.Sup(3)]), html.Td(id='b-square')]),
        html.Tr([html.Td(['(a+b)',html.Sup(2)] ), html.Td(id='ab-sqsum')]),
        html.Tr([html.Td(['c']), html.Td(id='ab-sqr')]),

    ]),
])


@app.callback(
    Output('a-square', 'children'),
    Output('b-square', 'children'),
    Output('ab-sqsum', 'children'),
    Output('ab-sqr', 'children'),
    Input('x', 'value'),
    Input('y', 'value'))
def callback_pytagoras(x,y):
    a_square = pow(x,2)
    b_square = pow(y,2)
    aplusb =  a_square + b_square

    c = sqrt(aplusb)

    return a_square, b_square, aplusb, c


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

Tulisan selanjutnya akan membahas mengenai styling menggunakan bootstrap.

Referensi