code: def _paint_icon(self, iconic, painter, rect, mode, state, options):
          
          painter.save()
          color = options['color']
          char = options['char']
  
          color_options = {
              QIcon.On: {
                  QIcon.Normal: (options['color_on'], options['on']),
                  QIcon.Disabled: (options['color_on_disabled'],
                                   options['on_disabled']),
                  QIcon.Active: (options['color_on_active'],
                                 options['on_active']),
                  QIcon.Selected: (options['color_on_selected'],
                                   options['on_selected']) 
              },
  
              QIcon.Off: {
                  QIcon.Normal: (options['color_off'], options['off']),
                  QIcon.Disabled: (options['color_off_disabled'],
                                   options['off_disabled']),
                  QIcon.Active: (options['color_off_active'],
                                 options['off_active']),
                  QIcon.Selected: (options['color_off_selected'],
                                   options['off_selected']) 
              }
          }
  
          color, char = color_options[state][mode]
  
          painter.setPen(QColor(color))
  
          # A 16 pixel-high icon yields a font size of 14, which is pixel perfect
          # for font-awesome. 16 * 0.875 = 14
          # The reason why the glyph size is smaller than the icon size is to
          # account for font bearing.
  
          draw_size = 0.875 * round(rect.height() * options['scale_factor'])
          prefix = options['prefix']
  
          # Animation setup hook
          animation = options.get('animation')
          if animation is not None:
              animation.setup(self, painter, rect)
  
          painter.setFont(iconic.font(prefix, draw_size))
          if 'offset' in options:
              rect = QRect(rect)
              rect.translate(options['offset'][0] * rect.width(),
                             options['offset'][1] * rect.height())
  
          painter.setOpacity(options.get('opacity', 1.0))
  
          painter.drawText(rect, Qt.AlignCenter | Qt.AlignVCenter, char)
          painter.restore()
docs: Paint a single icon.