#Same Call Back Function for all the widgets
def change_other_filters(key,value,filters_data):
column_name_key=key[1:]
column_values=value
remaining_filters=filter_names.remove(key)
for filter in remaining_filters:
filters_data[filter]= list(filters_data.query(β@column_name_key == @column_valuesβ
[filter].unique())
#creating widgets in for loop with same callback function
filter_boxes = {}
for i in range(len(filter_names)):
options = list(filters_data[filter_names[i]].astype(str).unique())
options.sort()
filter_boxes[filter_names[i]] = st.sidebar.multiselect(label=fβSELECT {filter_names[i]} β,
key=fβk{filter_names[i]}β,
options=[βAllβ] + options,
default=βAllβ,
on_change=change_other_filters(key,filter_boxes[filter_names[i]],filters_data)
#HOW TO KNOW WHICH WIDGET CALLED THE CALLBACK FUNCTION