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: Set the value of this SpinBox.
  
  If the value is out of bounds, it will be clipped to the nearest boundary
  or wrapped if wrapping is enabled.
  
  If the spin is integer type, the value will be coerced to int.
  Returns the actual value set.
  
  If value is None, then the current value is used (this is for resetting
  the value after bounds, etc. have changed)
docstr_tok: ["Set","the","value","of","this","SpinBox",".","If","the","value","is","out","of","bounds",",","it","will","be","clipped","to","the","nearest","boundary","or","wrapped","if","wrapping","is","enabled",".","If","the","spin","is","integer","type",",","the","value","will","be","coerced","to","int",".","Returns","the","actual","value","set",".","If","value","is","None",",","then","the","current","value","is","used","(","this","is","for","resetting","the","value","after","bounds",",","etc",".","have","changed",")"]
code: def setValue(self, value=None, update=True, delaySignal=False):
      """Set the value of this SpinBox.
  
      If the value is out of bounds, it will be clipped to the nearest boundary
      or wrapped if wrapping is enabled.
  
      If the spin is integer type, the value will be coerced to int.
      Returns the actual value set.
  
      If value is None, then the current value is used (this is for resetting
      the value after bounds, etc. have changed)
      """
      if value is None:
          value = self.value()
  
      bounded = True
      if not isnan(value):
          bounds = self.opts["bounds"]
          if None not in bounds and self.opts["wrapping"] is True:
              bounded = False
              if isinf(value):
                  value = self.val
              else:
                  # Casting of Decimals to floats required to avoid unexpected behavior of remainder operator
                  value = float(value)
                  l, u = float(bounds[0]), float(bounds[1])
                  value = (value - l) % (u - l) + l
          else:
              if bounds[0] is not None and value < bounds[0]:
                  bounded = False
                  value = bounds[0]
              if bounds[1] is not None and value > bounds[1]:
                  bounded = False
                  value = bounds[1]
  
      if self.opts["int"]:
          value = int(value)
  
      if not isinstance(value, decimal.Decimal):
          value = decimal.Decimal(str(value))
  
      prev, self.val = self.val, value
      changed = not fn.eq(value, prev)  # use fn.eq to handle nan
  
      if update and (changed or not bounded):
          self.updateText(prev=prev)
  
      if changed:
          self.sigValueChanging.emit(
              self, float(self.val)
          )  ## change will be emitted in 300ms if there are no subsequent changes.
          if not delaySignal:
              self.emitChanged()
  
      return value
  
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 16 for calling the SpinBox obj's underlying member method code with example usage: obj.setValue(value, update, delaySignal) and returns: value