class_docstr: State manager for groups of widgets.
  
  WidgetGroup handles common problems that arise when dealing with groups of widgets like a control
  panel:
  - Provide a single place for saving / restoring the state of all widgets in the group
  - Provide a single signal for detecting when any of the widgets have changed
code: def readWidget(self, w):
      if type(w) in WidgetGroup.classes:
          getFunc = WidgetGroup.classes[type(w)][1]
      else:
          getFunc = w.widgetGroupInterface()[1]
  
      if getFunc is None:
          return None
  
      # if the getter function provided in the interface is a bound method,
      # then just call the method directly. Otherwise, pass in the widget as the first arg
      # to the function.
      if inspect.ismethod(getFunc) and getFunc.__self__ is not None:
          val = getFunc()
      else:
          val = getFunc(w)
  
      if self.scales[w] is not None:
          val /= self.scales[w]
      n = self.widgetList[w]
      self.cache[n] = val
      return val
  
imports: import inspect
  import weakref
  from .Qt import QtCore, QtWidgets
label_desc: Use image node_id 12 for calling the WidgetGroup obj's underlying member method code with example usage: obj.readWidget(w) and returns: val, None