class_docstr: Pan-zoom transform
  
  Parameters
  ----------
  canvas : instance of Canvas | None
      The canvas to attch to.
  aspect : float | None
      The aspect ratio to apply.
  **kwargs : dict
      Keyword arguments to pass to the underlying `STTransform`.
docstr: Attach this tranform to a canvas
  
  Parameters
  ----------
  canvas : instance of Canvas
      The canvas.
docstr_tok: ["Attach","this","tranform","to","a","canvas","Parameters","--","--","--","--","--","canvas",":","instance","of","Canvas","The","canvas","."]
code: def attach(self, canvas):
      """Attach this tranform to a canvas
  
      Parameters
      ----------
      canvas : instance of Canvas
          The canvas.
      """
      self._canvas = canvas
      canvas.events.resize.connect(self.on_resize)
      canvas.events.mouse_wheel.connect(self.on_mouse_wheel)
      canvas.events.mouse_move.connect(self.on_mouse_move)
  
file_path: vispy/vispy/visuals/transforms/interactive.py
imports: from __future__ import division
  import numpy
  from .linear import STTransform
label_desc: Use image node_id 2 for calling the PanZoomTransform obj's underlying member method code with example usage: obj.attach(canvas) without return types