Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Dash调用函数,并使用非';t显式定义为输入_Python_Visualization_Plotly Dash - Fatal编程技术网

Python 如何使用Dash调用函数,并使用非';t显式定义为输入

Python 如何使用Dash调用函数,并使用非';t显式定义为输入,python,visualization,plotly-dash,Python,Visualization,Plotly Dash,我使用Dash来读取JSON,并根据它接收的数据创建大量输入字段,并将结果可视化。我希望有一个函数,当表单通过button press提交时,它将创建一个JSON,并将所有输入字段的值作为状态 import dash import dash_core_components as dcc import dash_html_components as html from dash.dependencies import Input, Output, State import plotly.graph

我使用Dash来读取JSON,并根据它接收的数据创建大量输入字段,并将结果可视化。我希望有一个函数,当表单通过button press提交时,它将创建一个JSON,并将所有输入字段的值作为状态

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State
import plotly.graph_objects as go
import json

app=dash.Dash
output = []
in2 = []


for (x,y) in data.items():
    in2.append(State(x, 'value'))
    output.append(html.Label(y['constraint_name']))
    if y['constraint_type']=='fs':
        output.append(dcc.RadioItems(id=x,
                                    options=[
                                        {"label" : "On", "value" : "On"},
                                        {"label" : "Off", "value" : "Off"}
                                    ],
                                    value = "On"
                                    ),)
    elif y['constraint_type']=='dur':
        output.extend((html.Br(),dcc.Input(id=x,
                                        type='number',
                                           value=10,
                                        min=0
                               ), html.Label("People ")))
    output.extend((html.Br(), html.Br()))

output.append(html.Button('Submit', id='submit'))
output.append(html.Div(id="div2"))

app.layout = html.Div(output, style={'width': '44%', 'display': 'inline-block', 'vertical-align': 'top'})

@app.callback(
    Output(component_id='div2', component_property='children'),
    in2
)
def update_output_div(input_value):
    teststring1 = ""
    for val in input_value:
        teststring1 += val

    return 'You\'ve entered "{}"'.format(teststring1)

应用程序在上述状态下不带回调运行,但如果它只有
输入('1','value')
,则将在2中获取列表
。我如何才能让它工作?

这里的关键是在列表中传递您的状态作为第三个参数。规则是输出作为第一个参数,输入作为第二个参数,状态作为第三个参数。输入和状态都必须在列表中传递。此外,您必须确保对于每个输入和状态,回调函数都必须接受一个参数。因此,在你的情况下,你必须这样做:

@app2.callback(
    Output(component_id='div2', component_property='children'),
    [Input('1', 'value')],
    [State('2', 'value')]
)
def update_output_div(input_value1, input_value2):
    ....

请记住,如果将第二个输入值设置为state,则在更改时不会触发回调函数。要使其在更改时触发回调,必须将其声明为输入,并与其他输入一起放入列表。

我理解,但是我在这里使用的列表是一个测试,它实际上是100个id,因此此方法不实用。我正在寻找一种方法来添加一个可以通过编程创建的列表。此时,您可能对创建自己的仪表板组件感兴趣--将回调放入react--@Wf19