예제 #1
0
파일: Elements.py 프로젝트: chenhaox/LUI
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)