code: def updateOpts(self, param, opts):
      # Of the attributes that can be set on a QPushButton, only the text
      # and tooltip attributes are different from standard pushbutton names
      nameMap = dict(title="text", tip="toolTip")
      # Special case: "title" could be none, in which case make it something
      # readable by the simple copy-paste logic later
      opts = opts.copy()
      if "name" in opts:
          opts.setdefault("title", opts["name"])
      if "title" in opts and opts["title"] is None:
          opts["title"] = param.title()
  
      # Another special case: icons should be loaded from data before
      # being passed to the button
      if "icon" in opts:
          opts["icon"] = QtGui.QIcon(opts["icon"])
  
      for attr in self.settableAttributes.intersection(opts):
          buttonAttr = nameMap.get(attr, attr)
          capitalized = buttonAttr[0].upper() + buttonAttr[1:]
          setter = getattr(self, f"set{capitalized}")
          setter(opts[attr])
  
file_path: pyqtgraph/pyqtgraph/parametertree/parameterTypes/action.py
imports: from ...Qt import QtCore, QtWidgets, QtGui
  from ..Parameter import Parameter
  from ..ParameterItem import ParameterItem
label_desc: Use image node_id 2 for calling the ParameterControlledButton obj's underlying member method code with example usage: obj.updateOpts(param, opts) without return types