docstr: Copy the image from the Agg canvas to the qt.drawable.
  
  In Qt, all drawing should be done inside of here when a widget is
  shown onscreen.
docstr_tok: ["Copy","the","image","from","the","Agg","canvas","to","the","qt.drawable",".","In","Qt",",","all","drawing","should","be","done","inside","of","here","when","a","widget","is","shown","onscreen","."]
code: def paintEvent(self, event):
      """
      Copy the image from the Agg canvas to the qt.drawable.
  
      In Qt, all drawing should be done inside of here when a widget is
      shown onscreen.
      """
      self._draw_idle()  # Only does something if a draw is pending.
  
      # If the canvas does not have a renderer, then give up and wait for
      # FigureCanvasAgg.draw(self) to be called.
      if not hasattr(self, "renderer"):
          return
  
      painter = QtGui.QPainter(self)
      try:
          # See documentation of QRect: bottom() and right() are off
          # by 1, so use left() + width() and top() + height().
          rect = event.rect()
          # scale rect dimensions using the screen dpi ratio to get
          # correct values for the Figure coordinates (rather than
          # QT5's coords)
          width = rect.width() * self.device_pixel_ratio
          height = rect.height() * self.device_pixel_ratio
          left, top = self.mouseEventCoords(rect.topLeft())
          # shift the "top" by the height of the image to get the
          # correct corner for our coordinate system
          bottom = top - height
          # same with the right side of the image
          right = left + width
          # create a buffer using the image bounding box
          bbox = Bbox([[left, bottom], [right, top]])
          buf = memoryview(self.copy_from_bbox(bbox))
  
          if QT_API == "PyQt6":
              from PyQt6 import sip
  
              ptr = int(sip.voidptr(buf))
          else:
              ptr = buf
  
          painter.eraseRect(rect)  # clear the widget canvas
          qimage = QtGui.QImage(
              ptr,
              buf.shape[1],
              buf.shape[0],
              QtGui.QImage.Format.Format_RGBA8888,
          )
          qimage.setDevicePixelRatio(self.device_pixel_ratio)
          # set origin using original QT coordinates
          origin = QtCore.QPoint(rect.left(), rect.top())
          painter.drawImage(origin, qimage)
          # Adjust the buf reference count to work around a memory
          # leak bug in QImage under PySide.
          if QT_API == "PySide2" and QtCore.__version_info__ < (5, 12):
              ctypes.c_long.from_address(id(buf)).value = 1
  
          self._draw_rect_callback(painter)
      finally:
          painter.end()
  
file_path: catboost/contrib/python/matplotlib/py3/matplotlib/backends/backend_qtagg.py
imports: import ctypes
  from matplotlib.transforms import Bbox
  from .qt_compat import QT_API, QtCore, QtGui
  from .backend_agg import FigureCanvasAgg
  from .backend_qt import _BackendQT, FigureCanvasQT
  from .backend_qt import FigureManagerQT, NavigationToolbar2QT
label_desc: Use image node_id 1 for calling the FigureCanvasQTAgg obj's underlying member method code with example usage: obj.paintEvent(event) without return types