class LUISliderWithLabel(LUIObject, LUICallback): def __init__(self, parent=None, width=100.0, filled=False, min_value=0, max_value=1.0, precision=2, value=None): LUIObject.__init__(self, x=0, y=0, w=width, h=0) LUICallback.__init__(self) max_numbers_before = max(len(str(int(max_value))), len(str(int(min_value)))) number_space_required = max_numbers_before if precision > 0: number_space_required += 1 + precision pixels_per_number = 7 self.precision = precision self.slider = LUISlider(self, width=width - pixels_per_number * number_space_required - 5, filled=filled, min_value=min_value, max_value=max_value, value=value) self.label = LUILabel(parent=self, shadow=True, text=u"1.23") self.label.right = 0 self.label.top = self.label.height - self.slider.height self.label.color = (1, 1, 1, 0.5) self.slider.add_change_callback(self._on_slider_changed) self.slider.add_change_callback(self._trigger_callback) self._on_slider_changed(self.slider, self.slider.get_value()) if parent is not None: self.parent = parent self.fit_to_children() def get_value(self): return self.slider.get_value() def set_value(self, val): self.slider.set_value(val) def _on_slider_changed(self, obj, value): self.label.text = ("{:." + str(self.precision) + "f}").format(value)