Plotly Dash:自动提交一旦最后一个输入框/整个表单被填写

2024-05-16 06:31:07 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我已经设置了一个页面,在点击submit按钮后获取3个输入并返回一个状态(pass/fail)。但是,我想通过在最后一个框被填充后自动提交来提高数据输入过程的效率。有没有一种方法可以在我当前的设置中使用dash bootstrap的表单或selenium来实现这一点?你知道吗

编辑:硒在这里可能不是一个可行的选择。水瓶怎么样?我对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)

Tags: divappnumberreturnifvaluestyledef