Skip to content
Snippets Groups Projects
Commit 5a78e24d authored by David, Sebastian's avatar David, Sebastian
Browse files

Added option for automatical updates, changed some variable names

parent ba9f8f3c
No related branches found
No related tags found
1 merge request!8UI Hinzufügen
......@@ -4,11 +4,11 @@ from dash import html
from dash import callback_context
from dash.dependencies import Input, Output, State
from dash.exceptions import PreventUpdate
import plotly.express as px
app = dash.Dash(__name__)
list_of_inputs = dict()
additional_options = ['Update Automatically']
app.layout = html.Div([
# Layer 0: For the Header and Help Function(s)
......@@ -31,6 +31,12 @@ app.layout = html.Div([
html.Button(id='start-button',children='Generate Graph')
]),
# Layer 3: For additional Options (e.g. Topological Sort)
html.Div([
html.H4('Additional Options'),
dcc.Checklist(id='additional-options',
options=[{'label':k,'value':k} for k in additional_options],
value=[])
]),
# Layer 4: For the Graph
html.Div([
html.Div(id='test-output')
......@@ -50,7 +56,7 @@ input-string is required as Output to clear the input box after each input
Input('clear-selected-button','n_clicks'),
State('input-checklist','value')
)
def update_input_list(input_value,btn1,btn2,all_values):
def update_input_checklist(input_value,btn1,btn2,all_values):
'''
:param input_value: given by dcc.Input
:type input_value: string
......@@ -71,6 +77,7 @@ def update_input_list(input_value,btn1,btn2,all_values):
return [{'label': i, 'value': i} for i in list_of_inputs],list(),''
# when the programm is first started:
if input_value == '':
list_of_inputs.clear()
return list(),list(),''
# when a new element is added via dcc.Input
if input_value not in list_of_inputs:
......@@ -96,36 +103,44 @@ Basic structure for a callback that generates an output
@app.callback(
Output('test-output','children'),
Input('start-button','n_clicks'),
State('input-checklist','options'),
State('input-checklist','value'),
State('forward-depth','value'),
State('backward-depth','value'),
Input('input-checklist','options'),
Input('input-checklist','value'),
Input('forward-depth','value'),
Input('backward-depth','value'),
State('additional-options','value')
)
def generate_output(n_clicks,all_options,all_values,forward_depth,backward_depth):
def generate_output(n_clicks,all_inputs,selected_inputs,
forward_depth,backward_depth,additional_options):
'''
:param n_clicks: how often has Generate Graph been clicked
:type n_clicks: int
:param all_options: all labels and values from the checklist,
:param all_inputs: all labels and values from the checklist,
regardless if they have been checked or not
:type all_options: list of dictionaries with 2 entries each
:param all_values: values of all checked elements
:type all_values: list of strings
:type all_inputs: list of dictionaries with 2 entries each
:param selected_inputs: values of all checked elements
:type selected_inputs: list of strings
:param forward_depth: forward recursion depth
:type forward_depth: unsigned int
:param backward_depth: backward recursion depth
:type backward_depth: unsigned int
:param additional_options: value of all selected additional options
:type additional_options: list of strings
'''
changed_id = [p['prop_id'] for p in callback_context.triggered][0]
if n_clicks is None:
raise PreventUpdate
else:
elif 'Update Automatically' in additional_options \
or 'start-button' in changed_id:
s = ''
for i in range(len(all_options)):
x = all_options[i]['value']
if x in all_values:
for i in range(len(all_inputs)):
x = all_inputs[i]['value']
if x in selected_inputs:
s += x*(abs(int(forward_depth)-int(backward_depth)))
else:
s += x*(int(forward_depth)+int(backward_depth))
return s
else:
raise PreventUpdate
if __name__ == '__main__':
app.run_server(debug=True)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment