code: def _get_key(self, keyval, keycode, state):
      unikey = chr(Gdk.keyval_to_unicode(keyval))
      key = cbook._unikey_or_keysym_to_mplkey(
          unikey, Gdk.keyval_name(keyval)
      )
      modifiers = [
          ("ctrl", Gdk.ModifierType.CONTROL_MASK, "control"),
          ("alt", Gdk.ModifierType.ALT_MASK, "alt"),
          ("shift", Gdk.ModifierType.SHIFT_MASK, "shift"),
          ("super", Gdk.ModifierType.SUPER_MASK, "super"),
      ]
      mods = [
          mod
          for mod, mask, mod_key in modifiers
          if (
              mod_key != key
              and state & mask
              and not (mod == "shift" and unikey.isprintable())
          )
      ]
      return "+".join([*mods, key])
  
imports: import functools
  import io
  import os
  import matplotlib
  from matplotlib import _api, backend_tools, cbook
  from matplotlib.backend_bases import ToolContainerBase, KeyEvent, LocationEvent, MouseEvent, ResizeEvent, CloseEvent
  from gi.repository import Gio, GLib, Gtk, Gdk, GdkPixbuf
  from .None import _backend_gtk
  from ._backend_gtk import _BackendGTK, _FigureCanvasGTK, _FigureManagerGTK, _NavigationToolbar2GTK, TimerGTK
label_desc: Use image node_id 15 for calling the FigureCanvasGTK4 obj's underlying member method code with example usage: obj._get_key(keyval, keycode, state) and returns: str