class_docstr: **Bases:** QtWidgets.QAbstractSpinBox
  
  Extension of QSpinBox widget for selection of a numerical value.     
  Adds many extra features:
  
    * SI prefix notation (eg, automatically display "300 mV" instead of "0.003 V")
    * Float values with linear and decimal stepping (1-9, 10-90, 100-900, etc.)
    * Option for unbounded values
    * Delayed signals (allows multiple rapid changes with only one change signal)
    * Customizable text formatting
  
  =============================  ==============================================
  **Signals:**
  valueChanged(value)            Same as QSpinBox; emitted every time the value 
                                 has changed.
  sigValueChanged(self)          Emitted when value has changed, but also combines
                                 multiple rapid changes into one signal (eg, 
                                 when rolling the mouse wheel).
  sigValueChanging(self, value)  Emitted immediately for all value changes.
  =============================  ==============================================
class_docstr_tok: ["*","*","Bases",":","*","*","QtWidgets.QAbstractSpinBox","Extension","of","QSpinBox","widget","for","selection","of","a","numerical","value",".","Adds","many","extra","features",":","*","SI","prefix","notation","(","eg",",","automatically","display","``","300","mV","''","instead","of","``","0.003","V","''",")","*","Float","values","with","linear","and","decimal","stepping","(","1-9",",","10-90",",","100-900",",","etc",".",")","*","Option","for","unbounded","values","*","Delayed","signals","(","allows","multiple","rapid","changes","with","only","one","change","signal",")","*","Customizable","text","formatting","=============================","==============================================","*","*","Signals",":","*","*","valueChanged","(","value",")","Same","as","QSpinBox",";","emitted","every","time","the","value","has","changed",".","sigValueChanged","(","self",")","Emitted","when","value","has","changed",",","but","also","combines","multiple","rapid","changes","into","one","signal","(","eg",",","when","rolling","the","mouse","wheel",")",".","sigValueChanging","(","self",",","value",")","Emitted","immediately","for","all","value","changes",".","=============================","=============================================="]
docstr: Return value of text or False if text is invalid.
docstr_tok: ["Return","value","of","text","or","False","if","text","is","invalid","."]
code: def interpret(self):
      """Return value of text or False if text is invalid."""
      strn = self.lineEdit().text()
      # strip prefix
      try:
          strn = strn.removeprefix(self.opts["prefix"])
      except AttributeError:
          strn = strn[len(self.opts["prefix"]) :]
  
      # tokenize into numerical value, si prefix, and suffix
      try:
          val, siprefix, suffix = fn.siParse(
              strn, self.opts["regex"], suffix=self.opts["suffix"]
          )
      except Exception:
          return False
  
      # check suffix
      if suffix != self.opts["suffix"]:
          return False
  
      # generate value
      val = self.opts["evalFunc"](val)
  
      if (self.opts["int"] or self.opts["finite"]) and (
          isinf(val) or isnan(val)
      ):
          return False
  
      if self.opts["int"]:
          val = int(fn.siApply(val, siprefix))
      else:
          try:
              val = fn.siApply(val, siprefix)
          except Exception:
              import sys
  
              sys.excepthook(*sys.exc_info())
              return False
  
      return val
  
imports: import decimal
  import re
  from math import isinf, isnan
  from ..None import functions
  from ..Qt import QtCore, QtGui, QtWidgets
  from ..SignalProxy import SignalProxy
label_desc: Use image node_id 28 for calling the SpinBox obj's underlying member method code with example usage: obj.interpret() and returns: val, False, False, False, False