【问题标题】:Can't change Input component using plotly dash callback无法使用 plotly dash 回调更改输入组件
【发布时间】:2019-04-08 18:08:51
【问题描述】:

我认为在使用回调更改输入文本时可能会出现问题。

这是一个显示问题的示例脚本。

import dash
import dash_html_components as html
import dash_core_components as dcc

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

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div([
    dcc.Input(
        id='an_input',
        value='Nothing done yet!',
        type='text'),
    dcc.Dropdown(
        id='my-dropdown',
        options=[
            {'label': 'New York City', 'value': 'NYC'},
            {'label': 'Montreal', 'value': 'MTL'},
            {'label': 'San Francisco', 'value': 'SF'}
        ],
        value='NYC'
    ),
    html.Div(id='output-container')
])

@app.callback(
    dash.dependencies.Output('an_input', 'value'),
    [dash.dependencies.Input('my-dropdown', 'value')])
def update_input_component(value):
    print('Trying to change input value')
    return 'You have selected "{}"'.format(value)


@app.callback(
    dash.dependencies.Output('output-container', 'children'),
    [dash.dependencies.Input('my-dropdown', 'value')])
def update_output(value):
    return 'You have selected "{}"'.format(value)


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

当我更改下拉菜单时,我希望输入文本会更新,但事实并非如此!

【问题讨论】:

    标签: python plotly-dash


    【解决方案1】:

    问题是您正在为输出使用输入组件。您可以在这里做两件事。您可以更新dcc.Input 组件的placeholder 值,也可以将其更改为其他值,例如html.Phtml.Div 以保留您的输出。我更喜欢第二个,因为看起来该组件在您的布局中的目的只是保存下拉列表的输出,而不是充当输入。这是一个工作示例。

    import dash
    import dash_html_components as html
    import dash_core_components as dcc
    
    external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
    
    app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
    app.layout = html.Div([
        html.Div(
            id='text-output',
            children='Your text here'),
        dcc.Dropdown(
            id='my-dropdown',
            options=[
                {'label': 'New York City', 'value': 'NYC'},
                {'label': 'Montreal', 'value': 'MTL'},
                {'label': 'San Francisco', 'value': 'SF'}
            ],
            value='NYC'
        ),
        html.Div(id='output-container')
    ])
    
    @app.callback(
        dash.dependencies.Output('text-output', 'children'),
        [dash.dependencies.Input('my-dropdown', 'value')])
    def update_input_component(value):
        print('Trying to change input value')
        return 'You have selected "{}"'.format(value)
    
    
    @app.callback(
        dash.dependencies.Output('output-container', 'children'),
        [dash.dependencies.Input('my-dropdown', 'value')])
    def update_output(value):
        return 'You have selected "{}"'.format(value)
    
    
    if __name__ == '__main__':
        app.run_server(debug=True)
    

    如果你真的想使用dcc.Input,那么你可以像这样更改代码。输入:

    dcc.Input(
            id='an_input',
            value='',
            placeholder='Enter text...',
            type='text'),
    

    并使回调的输出如下: dash.dependencies.Output('an_input', 'placeholder'),

    【讨论】:

    • 在我的应用程序中,我想要一个带有一些参数的输入组件,我们称之为'a'。我想要一个下拉菜单,它有不同的选项来预填充“a”的值,然后用户可以根据需要进行更改。
    • 在这种情况下,我建议使用不同的工具来完成这项工作。 input 确实更适合用户输入他们想要的任何文本。如果您想让它们使用设定值,我认为单选按钮或下拉菜单是最好的选择。您已经有了下拉列表,为什么不在回调中使用该值而不是添加 input 作为中间人?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 2020-03-17
    • 2020-08-12
    • 2021-08-13
    相关资源
    最近更新 更多