class Duration(TextMixin, Editor): UNITS = ('ns', 'ms', 'sec', 'min', 'hrs') MULTIPLIER = {'ns': 1e-6, 'ms': 1, 'sec': 1e3, 'min': 6e4, 'hrs': 3.6e5} def __init__(self, master, style_def=None): super().__init__(master, style_def) if style_def is None: style_def = {} self.config(**self.style.dark_highlight_active) self._entry = SpinBox(self, from_=0, to=1e6, **self.style.spinbox) self._entry.config(**self.style.no_highlight) self._entry.set_validator(numeric_limit, 0, 1e6) self._entry.on_change(self._change) self._unit = Spinner(self, **self.style.dark_input) self._unit.config(**self.style.no_highlight, width=50) self._unit.set_item_class(Choice.ChoiceItem) self._unit.set_values(Duration.UNITS) self._metric = style_def.get("units", "ms") self._unit.set(self._metric) self._unit.pack(side="right") self._unit.on_change(self._change) self._entry.pack(side='left', fill="x") def get(self): if self._entry.get() == '': return '' else: m1 = self.MULTIPLIER.get( self._unit.get(), 1) # Multiplier 1 converts to milliseconds, default is ms m2 = self.MULTIPLIER.get( self._metric, 1) # Multiplier 2 converts to required units, default is ms return int((self._entry.get() * m1) / m2)
def __init__(self, master, style_def=None): super().__init__(master, style_def) self.config(**self.style.dark_highlight_active) self._entry = SpinBox(self, from_=-9999, to=9999, **self.style.spinbox) self._entry.config(**self.style.no_highlight) self._entry.set_validator(numeric_limit, -9999, 9999) self._entry.pack(fill="x") self._entry.on_change(self._change)
def __init__(self, master, style_def=None): super().__init__(master, style_def) self.config(**self.style.dark_highlight_active) self._entry = SpinBox(self, from_=0, to=1e6, **self.style.spinbox) self._entry.config(**self.style.no_highlight) self._entry.set_validator(numeric_limit, 0, 1e6) self._entry.on_change(self._change) self._unit = Spinner(self, **self.style.dark_input) self._unit.config(**self.style.no_highlight, width=50) self._unit.set_item_class(Choice.ChoiceItem) self._unit.set_values(Duration.UNITS) self._unit.pack(side="right") self._unit.on_change(self._change) self._entry.pack(side='left', fill="x") self.set_def(style_def)