我有一个应用程序,从第二个模块中导入layout
,然后将其呈现在选项卡中,作为返回到此选项卡内容的app.layout
。 我遇到的问题是layout
使用输入的默认值导入,当我把键填写好并在标签之间切换时,当我回到输入标签时,这些值会重置为默认值“x”。 我通过在回调中再次声明布局来解决这个问题,但这看起来不太好,而且需要为进一步的功能编写两次布局。 这是我的代码:
if 'manager' not in vars():
manager = Recognition('xx', 'xx')
print('defining manager')
lcheck = 0
while lcheck == 0:
layout = [
html.Div([
html.Div(
[
html.H3("Primary API key"),
dcc.Input(
id='primary-key',
value=manager.api_key,
placeholder='Enter a value...',
type='text',
style = {"width":"50%"}
),
html.H3("Private API key"),
dcc.Input(
id='private-key',
value=manager.api_secret,
placeholder='Enter a value...',
type='text',
style = {"width":"50%"}
),
],
),
html.Button('Submit', id='button', className='btn btn-primary'),
html.Div(id='output-hidden')
])
]
lcheck=1
@app.callback(
Output('primary-key', 'value'),
[Input('button', 'n_clicks')],
[State('primary-key', 'value'),
State('private-key', 'value')]
)
def update_output(n_clicks, value1, value2):
values = {'value1':value1, 'value2':value2}
global manager
global layout
manager.update(value1, value2)
layout = [
html.Div([
html.Div(
[
html.H3("Primary API key"),
dcc.Input(
id='primary-key',
value=manager.api_key,
placeholder='Enter a value...',
type='text',
style = {"width":"50%"}
),
html.H3("Private API key"),
dcc.Input(
id='private-key',
value=manager.api_secret,
placeholder='Enter a value...',
type='text',
style = {"width":"50%"}
),
],
),
html.Button('Submit', id='button', className='btn btn-primary'),
html.Div(id='output-hidden')
])
]
lcheck=0
return values['value1']
您可以看到,每当我通过按钮发送新数据时,它都会保存新的布局。但是,这种解决方案看起来很糟糕,我想找到更好的解决方案,而不会在代码中引入混乱。整个问题在于更新布局变量中的value=manager.api_key
和value=manager.api_secret
。我想从普通的list
中获取值的访问权限,但这是不可能的,因为它不像常规列表嵌套。有没有办法访问这些值,例如layout.getid("primary-key").value
或类似这样的东西?如何清理这段代码?
[Input('storage', 'data')], [State('storage', 'data')])
?如果存储更改,则将调用回调函数,并且您可以通过输入访问data
。为什么还需要状态?我认为这是冗余的。 - dl.meteo