code: def eventFilter(self, widget, event):
          
  
          # ---- Zooming
          if event.type() == QEvent.Wheel:
              modifiers = QApplication.keyboardModifiers()
              if modifiers == Qt.ControlModifier:
                  if event.angleDelta().y() > 0:
                      self.zoom_in()
                  else:
                      self.zoom_out()
                  return True
              else:
                  return False
  
          # ---- Panning
          # Set ClosedHandCursor:
          elif event.type() == QEvent.MouseButtonPress:
              if event.button() == Qt.LeftButton:
                  QApplication.setOverrideCursor(Qt.ClosedHandCursor)
                  self._ispanning = True
                  self.xclick = event.globalX()
                  self.yclick = event.globalY()
  
          # Reset Cursor:
          elif event.type() == QEvent.MouseButtonRelease:
              QApplication.restoreOverrideCursor()
              self._ispanning = False
  
          # Move  ScrollBar:
          elif event.type() == QEvent.MouseMove:
              if self._ispanning:
                  dx = self.xclick - event.globalX()
                  self.xclick = event.globalX()
  
                  dy = self.yclick - event.globalY()
                  self.yclick = event.globalY()
  
                  scrollBarH = self.horizontalScrollBar()
                  scrollBarH.setValue(scrollBarH.value() + dx)
  
                  scrollBarV = self.verticalScrollBar()
                  scrollBarV.setValue(scrollBarV.value() + dy)
  
          return QWidget.eventFilter(self, widget, event)
docs: A filter to control the zooming and panning of the figure canvas.