Python Dash 下拉列表

标签 python plotly-dash

有六个问题要问用户。如果用户回答了这些问题,我正在尝试制作一个应用程序,该应用程序将确定在右侧使用哪种研究设计的结果。我正在用 python dash 做这个应用程序。我的 Python 代码如下。如何编写一个python代码,在用户回答问题后,可以根据给出的答案带来研究设计的结果?这个dash程序中的回调代码应该怎么写呢?非常感谢您。

Application screenshot in Turkish

import dash
import dash_bootstrap_components as dbc
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output

from sympy import *

az = ""
bz = ""
app = dash.Dash(external_stylesheets=[dbc.themes.FLATLY])

app.config.suppress_callback_exceptions = True
logo = "analiz.png"

title = dcc.Link(id='ustbaslik',
                 href="/",
                 className="navbar-brand",
                 style={"margin-top": "12px"})

acıklama = [
    dbc.CardHeader(id='acik'),
    dbc.CardBody([
        html.H5(id='ortabaslik', className="card-title"),
        html.P(id='ortamesaj', className="card-text text-justify",),
    ]),
]

sonuc = [
    dbc.CardHeader(id='sonuc'),
    dbc.CardBody([
        html.P(id='mesaj', className="card-text text-justify",),
    ]),
]

app.layout = html.Div([
    html.Nav([
        dbc.Container([
            dbc.Row([
                dbc.Col(title, align="left",width="auto"),
                dbc.Col("", align="left",width="%100"),
                ],
                justify="between",
                align="center",
            ),
            dbc.Row([
                dbc.Col(
                    html.Div([
                        html.Button('Türkçe', id='btn-nclicks-1'),
                        html.Button('İngilizce', id='btn-nclicks-2'),
                    ]) 
                ),
                ],
                justify="between",
                align="center",
            )
        ])
        ],
        className="navbar navbar-dark bg-dark navbar-expand-md bg-light sticky-top",
    ),

    dbc.Container(
        dbc.Row([
            dbc.Col(dbc.Card(acıklama, color="primary", inverse=True)),
            dbc.Col(
                html.Div(children=[
                    html.Label('Araştırmadaki Değişken Türünü Giriniz:'),
                    dcc.Dropdown(
                        options=[
                            {'label': 'Nitel', 'value': 'nitel'},
                            {'label': 'Nicel', 'value': 'nicel'}
                        ],
                        value='tur'
                    ),
                    html.Hr(),
                    html.Label('Girişim var mı'),
                    dcc.Dropdown(
                        options=[
                            {'label': 'Evet', 'value': 'evet'},
                            {'label': 'Hayır', 'value': 'hayır'}
                        ],
                        value='gir'
                    ),
                    html.Hr(),
                    html.Label('Hipotez var mı:'),
                    dcc.Dropdown(
                        options=[
                            {'label': 'Evet', 'value': 'evet'},
                            {'label': 'Hayır', 'value': 'hayır'}
                        ],
                        value='hip'
                    ),
                    html.Hr(),
                    html.Label('Hasta sayısı:'),
                    dcc.Dropdown(
                        options=[
                            {'label': 'Bir hasta', 'value': 'bir'},
                            {'label': 'Birden fazla hasta', 'value': 'birden'},
                            {'label': 'Bir grup hasta', 'value': 'grup'}
                        ],
                        value='has'
                    ),
                    html.Hr(),
                    html.Label('Araştırma sorusunun yönü:'),
                    dcc.Dropdown(
                        options=[
                            {'label': 'Yok', 'value': 'yok'},
                            {'label': 'Geriye', 'value': 'geri'},
                            {'label': 'İleriye', 'value': 'ileri'}
                        ],
                        value='yon'
                    ),
                    html.Hr(),
                    html.Label('Araştırmadan elde edilen ölçüt:'),
                    dcc.Dropdown(
                        options=[
                            {'label': 'Prevelans Hızı', 'value': 'pre'},
                            {'label': 'Olasılık Oranı', 'value': 'ola'},
                            {'label': 'İnsidans Hızı', 'value': 'hız'}
                        ],
                        value='eld'
                    ),
                ])
                ),
                dbc.Col(dbc.Card(sonuc, color="primary", inverse=True)
            )],
            style={"margin-top": "50px"},
        ),
    ),
    html.Hr(),
    dcc.Location(id='url', refresh=False),
    html.Div(id='page-content'),
])

@app.callback([
    Output('ustbaslik', 'children'),
    Output('ortabaslik', 'children'),
    Output('ortamesaj', 'children'),
    Output('acik', 'children'),
    Output('sonuc', 'children')
],
[
    Input('btn-nclicks-1', 'n_clicks'),
    Input('btn-nclicks-2', 'n_clicks')
])

def displayClick(btn1, btn2):
    changed_id = [p['prop_id'] for p in dash.callback_context.triggered][0]
    if 'btn-nclicks-1' in changed_id:
        ustbaslik = 'EPİDEMİYOLOJİK DENEY TASARIMLARI'
        ortabaslik = 'Epidemiyolojik Deney Tasarımları'
        ortamesaj = 'Epidemiyolojik araştırmalar, hastalıkların ...'
        acik = 'Açıklama'
        sonuc = 'Araştırma Tasarımınız ...'
    elif 'btn-nclicks-2' in changed_id:
        ustbaslik = 'EPIDEMIOLOGICAL EXPERIMENT DESIGN'
        ortabaslik = 'Theoretical Probability Distributions Software'
        ortamesaj = 'Epidemiological research, diseases and ...' 
        acik = 'Explanation'
        sonuc ='Your Research Design ...'
    else:
        ustbaslik = 'EPİDEMİYOLOJİK DENEY TASARIMLARI'
        ortabaslik = 'Epidemiyolojik Deney Tasarımları'
        ortamesaj = 'Epidemiyolojik araştırmalar, hastalıkların ...'
        acik = 'Açıklama'
        sonuc = 'Araştırma Tasarımınız ...'
    return ustbaslik,ortabaslik,ortamesaj,acik,sonuc

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

最佳答案

您需要进行一些更改。首先你需要给你的下拉列表一个id:

dcc.Dropdown(id='dropdown1',
            options=[{'label': 'Nitel', 'value': 'nitel'},
                     {'label': 'Nicel', 'value': 'nicel'}],
            value='tur'),

我给它一个 id ‘dropdown1’

我还为输出添加了一个容器,只是为了显示回调工作:

html.Div(id='dd-output-container'),

那么回调就是:

@app.callback(
    Output('dd-output-container', 'children'),
    [Input('dropdown1', 'value')],
    )
def dropdown1_callback(v):
    return v

希望这对您有所帮助。可以找到更多帮助 here

关于Python Dash 下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65781344/

相关文章:

python - 语法错误: “],” invalid syntax - Dash Graph Building

Python 用 0-x 索引替换列值(对于 xgboost)

python - 如何使用 scrapy 将多个页面的数据收集到单个数据结构中

python - Gensim:词向量编码问题

python - 如果 Dash 应用程序因导入的大数据而变慢,如何使 Dash 应用程序运行得更快

python - Dash datepicker max_date_allowed 作为当前日期不能正常工作

python - 导致 VerifiedHTTPSConnection 对象的 GET 请求没有属性 '_tunnel_host'

创建嵌套字典的 Pythonic 方式

python - 阴谋冲刺 : How to debug "Error loading layout"?

python - 如何基于两个因素定义散点图点颜色的条件语句?