我正在尝试为价格期权(财务)创建破折号应用程序。 我进行布局时,交互组件没有太多问题。 我的问题是:
我有一个daq.NumericInput(#daq1),它根据在#daq1中输入的数字来创建其他几个daq.NumericIputs。 现在,我想将这些值存储在创建的daq.NumericInputs中,但是我不知道我会预先拥有多少个值。
我尝试过:
-1 /在dict中同时创建daq.NumericInputs的ID时,将它们存储在json中,然后尝试对该dict进行回调,该dict具有可变数量的元素。
-2 /使用StatePattern,StateGroup ...(如此处显示:https://github.com/plotly/dash/issues/475)。创建群组ID时,我将其提供给了daq.NumericInputs,然后尝试以组的形式在我的回调中调用它们。
call_input = daq.NumericInput(
id="call_input", className="setting-input", size=1000, max=nb_max_option,value=0
)
#in the app.layout :
call_input
html.Div(id='data-list-1')
html.Div(id="call-tab")
@app.callback([Output("call-tab", "children"),Output('data-list-1','children')],
[Input("call_input", "value")])
def build_call_tab(value):
my_list = []
store_data_1 = {}
store_data_1["call_input"]="value"
if float(format(value)) > 0:
my_list.append(
build_value_setter_line_3h(
"call-tab-header",
"Product",
"Strike",
"Buy/Sell"
)
)
for i in range (1,value+1):
my_list.append(
build_value_setter_line_3(
"call-tab-{}".format(i) ,
"Call Option {}".format(i) ,
daq.NumericInput(
id="call_input_strike{}".format(i) , className="setting-input", size=400, max=9999999,value=0
),
"buy_sell_call{}".format(i)
),
)
store_data_1["call_input_strike{}".format(i)]="value"
store_data_1["buy_sell_call{}".format(i)]="value"
return my_list, json.dumps(store_data_1)
@app.callback(Output("graph-payoff-1", "children"),
[Input("button-payoff", "n_clicks")],
[State(key,value) for key, value in json.loads('data-list-1').items()])
def ...
@app.callback(Output("graph-payoff-1", "children"),
[Input("button-payoff", "n_clicks")],
[StateGroup(group='id', property='value')])
def ...
也许我完全迷失了方向,但我做错了方法(我从这个周末开始开发此应用程序,但是我从未在破折号(python)中做过其他应用程序,而在Shiny(R)中只做过一个)。
欢迎您提出所有答案和建议!