def __init__(self, init_values): super().__init__() self.widget_list = [] box_layout = BoxLayout(orientation='vertical') box_layout.size_hint_y = None box_layout.height = 0 all_params = self.filter_params # set the initial values as specified by the pipeline for key, init_value in init_values.items(): all_params[key]['init_val'] = init_value # create all the widgets for name, params in all_params.items(): # Add slider to widgets slider_widget = Slider(min=params['min_val'], max=params['max_val'], value=params['init_val'], step=params['step_val']) slider_widget.label_name = name slider_widget.bind(value=self._on_value_changed) slider_widget.size_hint_y = None slider_widget.height = '32sp' self.widget_list.append(slider_widget) # create label and value with widgets underneath widget_box_layout = BoxLayout(orientation='vertical') widget_box_layout.size_hint_y = None widget_box_layout.height = 0 widget_label = Label(size_hint=(1, None)) widget_label.label_name = name widget_label.display_callback = self.get_display_callback(name) widget_label.text = self.get_widget_display_text( widget_label, str(int(params['init_val']))) widget_label.texture_update() widget_label.height = widget_label.texture_size[1] slider_widget.label_widget = widget_label # put it all together widget_box_layout.add_widget(widget_label) widget_box_layout.add_widget(slider_widget) widget_box_layout.padding = (5, -5) box_layout.add_widget(widget_box_layout) widget_box_layout.height = widget_label.height + slider_widget.height + 5 box_layout.height += widget_box_layout.height self.size_hint_y = None self.height = box_layout.height self.add_filter_widget(box_layout)