import wx # type: ignore from gooey.gui import formatters from gooey.gui.components.widgets.bases import TextContainer from gooey.python_bindings import types as t class IntegerField(TextContainer): """ An integer input field """ widget_class = wx.SpinCtrl def getWidget(self, *args, **options): widget = self.widget_class(self, value='', min=self._options.get('min', 0), max=self._options.get('max', 100)) return widget def getWidgetValue(self): return self.widget.GetValue() def setValue(self, value): self.widget.SetValue(int(value)) def formatOutput(self, metatdata, value): # casting to string so that the generic formatter # doesn't treat 0 as false/None return formatters.general(metatdata, str(value)) def getUiState(self) -> t.FormField: widget: wx.SpinCtrl = self.widget return t.IntegerField( id=self._id, type=self.widgetInfo['type'], value=self.getWidgetValue(), min=widget.GetMin(), max=widget.GetMax(), error=self.error.GetLabel() or None, enabled=self.IsEnabled(), visible=self.IsShown() ) class DecimalField(IntegerField): """ A decimal input field """ widget_class = wx.SpinCtrlDouble def getWidget(self, *args, **options): widget = self.widget_class(self, value='', min=self._options.get('min', 0), max=self._options.get('max', 100), inc=self._options.get('increment', 0.01)) widget.SetDigits(self._options.get('precision', widget.GetDigits())) return widget def setValue(self, value): self.widget.SetValue(value) def getUiState(self) -> t.FormField: widget: wx.SpinCtrlDouble = self.widget return t.IntegerField( id=self._id, type=self.widgetInfo['type'], value=self.getWidgetValue(), min=widget.GetMin(), max=widget.GetMax(), error=self.error.GetLabel() or None, enabled=self.IsEnabled(), visible=self.IsShown() )