如何使用回调将破折号绘图组件抽象到另一个文件中?

问题描述 投票:0回答:2

目前,我的应用程序 python 文件与 Django 框架中的特定组件分开。

我见过很多在应用程序 python 文件的同一个文件中编写带有回调的每个组件的示例。我想知道如何在带有回调的文件中编写 update_output_div() 函数并让应用程序调用它?非常感谢!

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

app.layout = html.Div([
...
])

@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)
python django callback plotly-dash
2个回答
1
投票

您可以创建一个将

app
作为参数的函数,并将您的装饰函数放入该函数中:

def init_callback(app):
    @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)

然后你可以在定义

app.layout
之后像这样调用函数:

init_callback(app)

0
投票

我正在寻找一种将单个回调拆分为多个函数的方法,这些函数可以 a.) 有参数 b.) 存储在单独的文件中。截至 2024 年 9 月,我尚未在网络上找到任何内容。这是此问题的解决方案。也许会对某人有所帮助:

test_functions.py

def my_function(input):
    return input

test_app.py

from dash import callback, ctx, Dash, html, dcc, Input, Output
from test_function import my_function

app = Dash(__name__)

app.layout = html.Div([
    
    dcc.Dropdown(id = "input1", options=[1, 2, 3, 4], value=1),
    dcc.Dropdown(id = "input2", options=[5, 6, 7, 8], value=5),
    html.Div(id = "output"),
])

@callback(
    Output("output", 'children'),
    Input("input1", "value"),
    Input("input2", "value"),
    prevent_initial_call=True,
)

def interim(d1, d2):

    if ctx.triggered_id == "input1":
        res = my_function(d1)

    if ctx.triggered_id == "input2":
        res = my_function(d2)

    return res

app.run_server()

函数还可以采用多个参数(标准逗号分隔)和/或返回多个结果(作为字典或列表)。

© www.soinside.com 2019 - 2024. All rights reserved.