如何在 python 破折号中单击按钮时添加下拉菜单的值?
How to add value of a dropdown while button clicked in python dash?
我的问题很简单,但我是 Dash 和 UI 开发的初学者。
我创建了一个类似下面代码的表单:
我有一个包含两个值(Node 和 Edge)的下拉列表、一个“+”按钮和一个文本区域。用户想要 select 下拉列表中的一个值,然后单击 + 按钮。 selected 值必须添加到文本区域。如果用户再次点击 + 按钮,该值必须再次添加。我的代码更新文本区域广告中的值不会再次添加选定的值。我的代码有什么问题?
import dash_bootstrap_components as dbc
import dash_core_components as dcc
fLayout = dbc.FormGroup([
dbc.Form([
dcc.Dropdown(options=[{'label':'Node','value':'Node'},{'label':'Edge','value':'Edge'}],id='fcolumns'),
dbc.Button ('+',id='fcol_btn')
],inline=True),
dbc.Form([
dbc.Button(['='],id='fequal'),
dbc.Button (['>'],id='fgt')
],inline=True),
dbc.Form([
dbc.Textarea(id='ftxt'),
dbc.Button (['ok'],id='ftxt_btn')
],inline=True)
])
@app.callback(
Output("ftxt", "value"),
[Input("fcol_btn", "n_clicks"), Input("fequal", "n_clicks"),Input("fgt", "n_clicks")],
[State("fcolumns", "value")],
)
def filter_update(fcol_btn, fequal, fgt,fcolumns):
if fcol_btn>0:
return fcolumns
if fequal >0:
return "="
if fgt >0:
return ">"
不确定我是否完全理解您要实现的目标。但是加号、等号按钮等逻辑需要你根据自己的需要在if语句中自己定义。
在下面找到一个 运行 版本。
一般来说:你应该在设置组件时初始化值,否则你需要捕获所有的无。
import dash
import dash_bootstrap_components as dbc
from dash import dcc
from dash import html
from dash.dependencies import Input, Output, State
app = dash.Dash(__name__)
app.layout = html.Div([
dcc.Dropdown(options=[{'label':'Node','value':'Node'},
{'label':'Edge','value':'Edge'}],id='fcolumns'),
dbc.Button ('+',id='fcol_btn',n_clicks=0),
dbc.Button(['='],id='fequal',n_clicks=0),
dbc.Button (['>'],id='fgt',n_clicks=0),
dbc.Textarea(id='ftxt',value=" "),
dbc.Button (['ok'],id='ftxt_btn',n_clicks=0),
html.Div(id='final_result',children=[])
])
@app.callback(
Output("ftxt", "value"),
[Input("fcol_btn", "n_clicks"),
Input("fequal", "n_clicks"),
Input("fgt", "n_clicks"),
Input("fcolumns", "value")],
State("ftxt", "value")
)
def do_something(fcol_btn,fequal,fgt,fcolumns,ftxt):
ctx = dash.callback_context
if ctx.triggered:
triggered_item = ctx.triggered[0]['prop_id'].split('.')[0]
else:
triggered_item = None
print('Triggered item was', triggered_item)
print(f'fcol_btn:{fcol_btn}, fequal:{fequal}, fgt:{fgt}, fcolumns:{fcolumns}')
operator = ''
if triggered_item != None:
if triggered_item == "fcol_btn":
operator= "+"
if triggered_item == "fequal":
operator= "="
if triggered_item == "fgt":
operator= ">"
if operator == '':
ftxt = str(ftxt)
else:
ftxt = str(ftxt)+operator+str(fcolumns)
return ftxt
@app.callback( Output("final_result", "children"),
Input("ftxt_btn", "n_clicks"),
State("ftxt", "value"))
def return_all(ftxt_btn,text):
if ftxt_btn>0:
print(text)
return [text]
if __name__ == '__main__':
app.run_server(debug=False, port=8050)
我的问题很简单,但我是 Dash 和 UI 开发的初学者。
我创建了一个类似下面代码的表单: 我有一个包含两个值(Node 和 Edge)的下拉列表、一个“+”按钮和一个文本区域。用户想要 select 下拉列表中的一个值,然后单击 + 按钮。 selected 值必须添加到文本区域。如果用户再次点击 + 按钮,该值必须再次添加。我的代码更新文本区域广告中的值不会再次添加选定的值。我的代码有什么问题?
import dash_bootstrap_components as dbc
import dash_core_components as dcc
fLayout = dbc.FormGroup([
dbc.Form([
dcc.Dropdown(options=[{'label':'Node','value':'Node'},{'label':'Edge','value':'Edge'}],id='fcolumns'),
dbc.Button ('+',id='fcol_btn')
],inline=True),
dbc.Form([
dbc.Button(['='],id='fequal'),
dbc.Button (['>'],id='fgt')
],inline=True),
dbc.Form([
dbc.Textarea(id='ftxt'),
dbc.Button (['ok'],id='ftxt_btn')
],inline=True)
])
@app.callback(
Output("ftxt", "value"),
[Input("fcol_btn", "n_clicks"), Input("fequal", "n_clicks"),Input("fgt", "n_clicks")],
[State("fcolumns", "value")],
)
def filter_update(fcol_btn, fequal, fgt,fcolumns):
if fcol_btn>0:
return fcolumns
if fequal >0:
return "="
if fgt >0:
return ">"
不确定我是否完全理解您要实现的目标。但是加号、等号按钮等逻辑需要你根据自己的需要在if语句中自己定义。
在下面找到一个 运行 版本。 一般来说:你应该在设置组件时初始化值,否则你需要捕获所有的无。
import dash
import dash_bootstrap_components as dbc
from dash import dcc
from dash import html
from dash.dependencies import Input, Output, State
app = dash.Dash(__name__)
app.layout = html.Div([
dcc.Dropdown(options=[{'label':'Node','value':'Node'},
{'label':'Edge','value':'Edge'}],id='fcolumns'),
dbc.Button ('+',id='fcol_btn',n_clicks=0),
dbc.Button(['='],id='fequal',n_clicks=0),
dbc.Button (['>'],id='fgt',n_clicks=0),
dbc.Textarea(id='ftxt',value=" "),
dbc.Button (['ok'],id='ftxt_btn',n_clicks=0),
html.Div(id='final_result',children=[])
])
@app.callback(
Output("ftxt", "value"),
[Input("fcol_btn", "n_clicks"),
Input("fequal", "n_clicks"),
Input("fgt", "n_clicks"),
Input("fcolumns", "value")],
State("ftxt", "value")
)
def do_something(fcol_btn,fequal,fgt,fcolumns,ftxt):
ctx = dash.callback_context
if ctx.triggered:
triggered_item = ctx.triggered[0]['prop_id'].split('.')[0]
else:
triggered_item = None
print('Triggered item was', triggered_item)
print(f'fcol_btn:{fcol_btn}, fequal:{fequal}, fgt:{fgt}, fcolumns:{fcolumns}')
operator = ''
if triggered_item != None:
if triggered_item == "fcol_btn":
operator= "+"
if triggered_item == "fequal":
operator= "="
if triggered_item == "fgt":
operator= ">"
if operator == '':
ftxt = str(ftxt)
else:
ftxt = str(ftxt)+operator+str(fcolumns)
return ftxt
@app.callback( Output("final_result", "children"),
Input("ftxt_btn", "n_clicks"),
State("ftxt", "value"))
def return_all(ftxt_btn,text):
if ftxt_btn>0:
print(text)
return [text]
if __name__ == '__main__':
app.run_server(debug=False, port=8050)