code: def create_action(parent, text, shortcut=None, icon=None, tip=None,
                    toggled=None, triggered=None, data=None, menurole=None,
                    context=Qt.WindowShortcut):
      
      action = SpyderAction(text, parent)
      if triggered is not None:
          action.triggered.connect(triggered)
      if toggled is not None:
          action.toggled.connect(toggled)
          action.setCheckable(True)
      if icon is not None:
          if is_text_string(icon):
              icon = get_icon(icon)
          action.setIcon(icon)
      if tip is not None:
          action.setToolTip(tip)
          action.setStatusTip(tip)
      if data is not None:
          action.setData(to_qvariant(data))
      if menurole is not None:
          action.setMenuRole(menurole)
  
      # Workround for Mac because setting context=Qt.WidgetShortcut
      # there doesn't have any effect
      if sys.platform == 'darwin':
          action._shown_shortcut = None
          if context == Qt.WidgetShortcut:
              if shortcut is not None:
                  action._shown_shortcut = shortcut
              else:
                  # This is going to be filled by
                  # main.register_shortcut
                  action._shown_shortcut = 'missing'
          else:
              if shortcut is not None:
                  action.setShortcut(shortcut)
              action.setShortcutContext(context)
      else:
          if shortcut is not None:
              action.setShortcut(shortcut)
          action.setShortcutContext(context)
  
      return action
docs: Create a QAction