code: def get_frame(self):
      # This gets automatically called by the RFB widget
  
      # Only draw if the draw region is not null
      if self._physical_size[0] <= 1 or self._physical_size[1] <= 1:
          return None
  
      # Handle initialization
      if not self._lifecycle:
          self._lifecycle = 1
          self._vispy_canvas.set_current()
          self._vispy_canvas.events.initialize()
          self._emit_resize_event()
  
      # Draw and obtain result
      self._vispy_canvas.set_current()
      with self._helper:
          self._vispy_canvas.events.draw(region=None)
          array = self._helper.get_frame()
  
      # Flush commands here to clean up - otherwise we get errors related to
      # framebuffers not existin.
      self._vispy_canvas.context.flush_commands()
  
      return array
  
imports: import asyncio
  from ..base import BaseApplicationBackend, BaseCanvasBackend, BaseTimerBackend
  from ...app import Timer
  from ...util import keys
  from ._offscreen_util import OffscreenContext, FrameBufferHelper
label_desc: Use image node_id 5 for calling the CanvasBackend obj's underlying member method code with example usage: obj.get_frame() and returns: array, None