В настоящее время я настроил страницу так, чтобы она принимала 3 входа и возвращала статус (прошел / не прошел) после нажатия кнопки отправки. Тем не менее, я хотел бы сделать процесс ввода данных более эффективным, автоматически отправляя после заполнения последнего поля. Есть ли способ сделать это с моими текущими настройками, используя формы начальной загрузки или селен?
edit: Selenium, возможно, здесь не подходит. Как насчет Flask-WTF? Я совсем не знаком с Flask, но поскольку Dash построен поверх Flask, мой код может быть легко интегрирован поверх приложения Flask.
Код ниже:
external_stylesheets = ['dbc.themes.BOOTSTRAP']
app = dash.Dash(__name__, external_stylesheets=[dbc.themes.COSMO])
app.css.append_css({
'external_url': 'https://codepen.io/chriddyp/pen/bWLwgP.css 104'
})
def update_database(star, serial, weight, andon):
sheet.append([datetime.now(), star, serial, weight, andon])
raw.save(r'Unit weights_test.xlsx')
def compare_tol(star, serial, weight):
if star is not '':
compare_group = df_main.loc[star, 'Group']
if float(weight) > float(df_groups.loc[compare_group, 'Upper']) or \
float(weight) < float(df_groups.loc[compare_group, 'Lower']):
andon = 'FAIL'
else:
andon = 'PASS'
else:
andon = '...'
update_database(star, serial, weight, andon)
return andon
def which_entry(label, af):
layout = html.Div([
dcc.Input(
id=label,
placeholder=f' {label}...',
type='text',
value='',
autoFocus=af
)
], style={'padding': '5px 5px'})
return layout
def andon_color(andon, n_blur):
if n_blur:
if andon == 'PASS':
return 'success'
elif andon == 'FAIL':
return 'warning'
else:
return 'secondary'
app.layout = html.Div([
html.Div([
html.Img(src='http://www.image.png',
width='250px')
]),
html.Div([
html.Div([
html.H3('Scan Star Number'),
]),
which_entry('Star Number', True),
html.Div([
html.H3('Scan Serial Number')
]),
which_entry('Serial Number', False),
html.Div([
html.H3('Enter Unit Weight')
]),
which_entry('Weight', False),
], style={'text-align': 'center'}),
html.Div([
dbc.Button('Submit', id='button', color='primary')
], style={'text-align': 'center',
'width': '250px'}),
html.Div([
dbc.Alert(id='andon', color='secondary')
], style={'text-align': 'center',
'width': '250px',
'padding': '5px 5px'})
], style={'width': '250px'})
@app.callback(
[
Output('andon', 'children'),
Output('andon', 'color'),
Output('Star Number', 'value'),
Output('Serial Number', 'value'),
Output('Weight', 'value')
],
[
Input('Weight', 'n_blur')
],
[
State('Star Number', 'value'),
State('Serial Number', 'value'),
State('Weight', 'value')
]
)
def output_all(n_blur, star, serial, weight):
if not n_blur:
raise dash.exceptions.PreventUpdate
andon = compare_tol(star, serial, weight)
return andon, andon_color(andon, n_blur), '', '', ''
if __name__ == '__main__':
app.run_server(debug=True)