【问题标题】:How to dynamically set a default value in a dcc.Dropdown when options come from a callback?如何在选项来自回调时动态设置DCC.Dropdown中的默认值?
【发布时间】:2020-12-24 00:16:06
【问题描述】:

这是 Dash 应用程序代码 (app.py) 的最小示例:

# Libraries
import csv
import pandas as pd
import dash
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Input, Output, State

# CSV files generation

row_list = [
    ["SN", "Name", "Quotes"],
    [1, "Buddha", "What we think we become"],
    [2, "Mark Twain", "Never regret anything that made you smile"],
    [3, "Oscar Wilde", "Be yourself everyone else is already taken"]
]
with open('quotes.csv', 'w', newline='') as file:
    writer = csv.writer(file, quoting=csv.QUOTE_NONNUMERIC, delimiter=',')
    writer.writerows(row_list)
    
    
import csv
with open('innovators.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(["SN", "Name", "Contribution"])
    writer.writerow([1, "Linus Torvalds", "Linux Kernel"])
    writer.writerow([2, "Tim Berners-Lee", "World Wide Web"])
    writer.writerow([3, "Guido van Rossum", "Python Programming"])


# Style
external_stylesheets = ['assets/style.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)


# Layout
app.layout = html.Div([
    html.Div([  
        dcc.Dropdown(
            id='dropdown_div',
            options=[
                {'label': 'Quotes', 'value': 'quotes.csv'},
                {'label': 'Innovators', 'value': 'innovators.csv'}
            ],
            value='quotes.csv'   
        )
    ]),
    html.Div([
       dcc.Dropdown(
            id='count_div'
       )
    ])
])

# Callback function
@app.callback(
    dash.dependencies.Output('count_div', 'options'),
    [dash.dependencies.Input('dropdown_div', 'value')])
def loadfile(path):
    df = pd.read_csv(path) 
    return [{'label': i, 'value': i} for i in df['Name'].drop_duplicates()]

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

我需要将第二个 Dropdown 的第一个值动态设置为其默认值。

在本例中,第二个下拉菜单将显示

  • 当 Quotes 是第一个下拉菜单的选定值时,Buddha 作为默认值。
  • 当 Innovators 是第一个下拉菜单的选定值时,Linus Torvalds 作为默认值。

【问题讨论】:

    标签: python plotly-dash


    【解决方案1】:

    解决办法是

    • 向回调函数添加一个输出,将默认值发送到第二个 ddc.Dropdown
    • 将默认值添加到return
    # Callback function
    @app.callback(
        [dash.dependencies.Output('count_div', 'options'),
        dash.dependencies.Output('count_div', 'value')],
        [dash.dependencies.Input('dropdown_div', 'value')])
    def loadfile(path):
        df = pd.read_csv(path) 
        return [{'label': i, 'value': i} for i in df['Name'].drop_duplicates()], df['Name'].drop_duplicates()[0]
    

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 2019-09-18
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 2021-10-25
      相关资源
      最近更新 更多