class_docstr: Tkinter backend for Canvas abstract class.
  Uses pyopengltk.OpenGLFrame as the internal tk.Frame instance that
  is able to receive OpenGL draw commands and display the results,
  while also being placeable in another Toplevel window.
class_docstr_tok: ["Tkinter","backend","for","Canvas","abstract","class",".","Uses","pyopengltk.OpenGLFrame","as","the","internal","tk.Frame","instance","that","is","able","to","receive","OpenGL","draw","commands","and","display","the","results",",","while","also","being","placeable","in","another","Toplevel","window","."]
docstr: Helper to parse key states into Vispy keys.
  
  Parameters
  ----------
  e : tk.Event
      The passed in Event.
  
  Returns
  -------
  tuple
      A tuple (key.Key(), chr(key)), which has the vispy key object and
      the character representation if available.
code: def _parse_keys(self, e):
      """Helper to parse key states into Vispy keys.
  
      Parameters
      ----------
      e : tk.Event
          The passed in Event.
  
      Returns
      -------
      tuple
          A tuple (key.Key(), chr(key)), which has the vispy key object and
          the character representation if available.
      """
      if e.keysym_num in KEYMAP:
          return KEYMAP[e.keysym_num], ""
      # e.char, e.keycode, e.keysym, e.keysym_num
      if e.char:
          self._dynamic_keymap[e.keycode] = e.char
          return keys.Key(e.char), e.char
  
      if e.keycode in self._dynamic_keymap:
          char = self._dynamic_keymap[e.keycode]
          return keys.Key(char), char
  
      warnings.warn(
          "The key you typed is not supported by the tkinter backend."
          "Please map your functionality to a different key"
      )
      return None, None
  
imports: from __future__ import division
  from time import sleep
  import warnings
  from ..base import BaseApplicationBackend, BaseCanvasBackend, BaseTimerBackend
  from ...util import keys
  from ...util.ptime import time
  from ...gloo import gl
label_desc: Use image node_id 9 for calling the CanvasBackend obj's underlying member method code with example usage: obj._parse_keys(e) and returns: None,  None, KEYMAP,  str, keys,  e, keys,  char