import streamlit as st # TODO: rename and refactor everything def select_num_interval(param_name: str, limits_list: list, defaults, **kwargs): st.sidebar.subheader(param_name) min_max_interval = st.sidebar.slider( "", limits_list[0], limits_list[1], defaults, key=hash(param_name) ) return min_max_interval def select_several_nums( param_name, subparam_names, limits_list, defaults_list, **kwargs ): st.sidebar.subheader(param_name) result = [] assert len(limits_list) == len(defaults_list) assert len(subparam_names) == len(defaults_list) for name, limits, defaults in zip(subparam_names, limits_list, defaults_list): result.append( st.sidebar.slider( name, limits[0], limits[1], defaults, key=hash(param_name + name) ) ) return tuple(result) def select_min_max(param_name, limits_list, defaults_list, min_diff=0, **kwargs): assert len(param_name) == 2 result = list( select_num_interval(" & ".join(param_name), limits_list, defaults_list) ) if result[1] - result[0] < min_diff: diff = min_diff - result[1] + result[0] if result[1] + diff <= limits_list[1]: result[1] = result[1] + diff elif result[0] - diff >= limits_list[0]: result[0] = result[0] - diff else: result = limits_list return tuple(result) def select_RGB(param_name, **kwargs): result = select_several_nums( param_name, subparam_names=["Red", "Green", "Blue"], limits_list=[[0, 255], [0, 255], [0, 255]], defaults_list=[0, 0, 0], ) return tuple(result) def replace_none(string): if string == "None": return None else: return string def select_radio(param_name, options_list, **kwargs): st.sidebar.subheader(param_name) result = st.sidebar.radio("", options_list, key=hash(param_name)) return replace_none(result) def select_checkbox(param_name, defaults, **kwargs): st.sidebar.subheader(param_name) result = st.sidebar.checkbox("True", defaults, key=hash(param_name)) return result # dict from param name to function showing this param param2func = { "num_interval": select_num_interval, "several_nums": select_several_nums, "radio": select_radio, "rgb": select_RGB, "checkbox": select_checkbox, "min_max": select_min_max, }