kivyblocks/kivyblocks/uitype/float.py
2022-01-27 11:08:13 +08:00

52 lines
1.2 KiB
Python

from kivy.uix.label import Label
from kivy.properties import NumericProperty, StringProperty
from ..baseWidget import FloatInput
from ..utils import *
from .factory import UiFactory, get_value
class FloatView(Label):
value = NumericProperty(None)
nullstr = StringProperty('')
dec = NumericProperty(2)
def __init__(self, **kw):
super(FloatView, self).__init__(text=self.nullstr, **kw)
self.wrap = True
self.halign = 'right'
self.valign = 'middle'
def on_value(self, *args):
if self.value is None:
self.text = self.bullstr
f = '%%.0%df' % self.dec
self.text = f % self.value
def getValue(self):
return self.value
def setValue(self, v):
self.value = v
@classmethod
def builder(self, desc, rec=None):
v = get_value(desc, rec=rec)
return FloatView(value=v,
dec=desc.get('dec', 2),
nullstr=desc.get('nullstr',''),
font_size=CSize(1),
halign='right',
valign='middle'
)
def build_input_float_widget(desc, rec=None):
v = get_value(desc, rec=rec)
kw = desc.get('uiparams', {})
w = FloatInput(**kw)
if v is not None:
w.setValue(v)
return w
UiFactory.register('float', build_input_float_widget, FloatView.builder)