class_docstr: Re-implementation of QGraphicsView that removes scrollbars and allows unambiguous control of the 
  viewed coordinate range. Also automatically creates a GraphicsScene and a central QGraphicsWidget
  that is automatically scaled to the full view geometry.
  
  This widget is the basis for :class:`PlotWidget <pyqtgraph.PlotWidget>`, 
  :class:`GraphicsLayoutWidget <pyqtgraph.GraphicsLayoutWidget>`, and the view widget in
  :class:`ImageView <pyqtgraph.ImageView>`.
  
  By default, the view coordinate system matches the widget's pixel coordinates and 
  automatically updates when the view is resized. This can be overridden by setting 
  autoPixelRange=False. The exact visible range can be set with setRange().
  
  The view can be panned using the middle mouse button and scaled using the right mouse button if
  enabled via enableMouse()  (but ordinarily, we use ViewBox for this functionality).
class_docstr_tok: ["Re-implementation","of","QGraphicsView","that","removes","scrollbars","and","allows","unambiguous","control","of","the","viewed","coordinate","range",".","Also","automatically","creates","a","GraphicsScene","and","a","central","QGraphicsWidget","that","is","automatically","scaled","to","the","full","view","geometry",".","This","widget","is","the","basis","for",":","class",":","`","PlotWidget","<","pyqtgraph.PlotWidget",">","`",",",":","class",":","`","GraphicsLayoutWidget","<","pyqtgraph.GraphicsLayoutWidget",">","`",",","and","the","view","widget","in",":","class",":","`","ImageView","<","pyqtgraph.ImageView",">","`",".","By","default",",","the","view","coordinate","system","matches","the","widget","'s","pixel","coordinates","and","automatically","updates","when","the","view","is","resized",".","This","can","be","overridden","by","setting","autoPixelRange=False",".","The","exact","visible","range","can","be","set","with","setRange","(",")",".","The","view","can","be","panned","using","the","middle","mouse","button","and","scaled","using","the","right","mouse","button","if","enabled","via","enableMouse","(",")","(","but","ordinarily",",","we","use","ViewBox","for","this","functionality",")","."]
code: def mouseMoveEvent(self, ev):
      lpos = ev.position() if hasattr(ev, "position") else ev.localPos()
      if self.lastMousePos is None:
          self.lastMousePos = lpos
      delta = Point(lpos - self.lastMousePos)
      self.lastMousePos = lpos
  
      super().mouseMoveEvent(ev)
      if not self.mouseEnabled:
          return
      self.sigSceneMouseMoved.emit(self.mapToScene(lpos.toPoint()))
  
      if (
          self.clickAccepted
      ):  ## Ignore event if an item in the scene has already claimed it.
          return
  
      if ev.buttons() == QtCore.Qt.MouseButton.RightButton:
          delta = Point(
              fn.clip_scalar(delta[0], -50, 50),
              fn.clip_scalar(-delta[1], -50, 50),
          )
          scale = 1.01**delta
          self.scale(
              scale[0],
              scale[1],
              center=self.mapToScene(self.mousePressPos.toPoint()),
          )
          self.sigDeviceRangeChanged.emit(self, self.range)
  
      elif ev.buttons() in [
          QtCore.Qt.MouseButton.MiddleButton,
          QtCore.Qt.MouseButton.LeftButton,
      ]:  ## Allow panning by left or mid button.
          px = self.pixelSize()
          tr = -delta * px
  
          self.translate(tr[0], tr[1])
          self.sigDeviceRangeChanged.emit(self, self.range)
  
imports: from ..None import functions
  from ..None import getConfigOption
  from ..GraphicsScene import GraphicsScene
  from ..Point import Point
  from ..Qt import QT_LIB, QtCore, QtGui, QtWidgets
label_desc: Use image node_id 31 for calling the GraphicsView obj's underlying member method code with example usage: obj.mouseMoveEvent(ev) without return types