code: def create_widgets(self):
      # Basic entry key sequence.
      self.frame_keyseq_basic = Frame(self, name="keyseq_basic")
      self.frame_keyseq_basic.grid(
          row=0, column=0, sticky="nsew", padx=5, pady=5
      )
      basic_title = Label(
          self.frame_keyseq_basic,
          text=f"New keys for '{self.action}' :",
      )
      basic_title.pack(anchor="w")
  
      basic_keys = Label(
          self.frame_keyseq_basic,
          justify="left",
          textvariable=self.key_string,
          relief="groove",
          borderwidth=2,
      )
      basic_keys.pack(ipadx=5, ipady=5, fill="x")
  
      # Basic entry controls.
      self.frame_controls_basic = Frame(self)
      self.frame_controls_basic.grid(
          row=1, column=0, sticky="nsew", padx=5
      )
  
      # Basic entry modifiers.
      self.modifier_checkbuttons = {}
      column = 0
      for modifier, variable in zip(self.modifiers, self.modifier_vars):
          label = self.modifier_label.get(modifier, modifier)
          check = Checkbutton(
              self.frame_controls_basic,
              command=self.build_key_string,
              text=label,
              variable=variable,
              onvalue=modifier,
              offvalue="",
          )
          check.grid(row=0, column=column, padx=2, sticky="w")
          self.modifier_checkbuttons[modifier] = check
          column += 1
  
      # Basic entry help text.
      help_basic = Label(
          self.frame_controls_basic,
          justify="left",
          text="Select the desired modifier keys\n"
          + "above, and the final key from the\n"
          + "list on the right.\n\n"
          + "Use upper case Symbols when using\n"
          + "the Shift modifier.  (Letters will be\n"
          + "converted automatically.)",
      )
      help_basic.grid(row=1, column=0, columnspan=4, padx=2, sticky="w")
  
      # Basic entry key list.
      self.list_keys_final = Listbox(
          self.frame_controls_basic,
          width=15,
          height=10,
          selectmode="single",
      )
      self.list_keys_final.insert("end", *AVAILABLE_KEYS)
      self.list_keys_final.bind(
          "<ButtonRelease-1>", self.final_key_selected
      )
      self.list_keys_final.grid(row=0, column=4, rowspan=4, sticky="ns")
      scroll_keys_final = Scrollbar(
          self.frame_controls_basic,
          orient="vertical",
          command=self.list_keys_final.yview,
      )
      self.list_keys_final.config(yscrollcommand=scroll_keys_final.set)
      scroll_keys_final.grid(row=0, column=5, rowspan=4, sticky="ns")
      self.button_clear = Button(
          self.frame_controls_basic,
          text="Clear Keys",
          command=self.clear_key_seq,
      )
      self.button_clear.grid(row=2, column=0, columnspan=4)
  
      # Advanced entry key sequence.
      self.frame_keyseq_advanced = Frame(self, name="keyseq_advanced")
      self.frame_keyseq_advanced.grid(
          row=0, column=0, sticky="nsew", padx=5, pady=5
      )
      advanced_title = Label(
          self.frame_keyseq_advanced,
          justify="left",
          text=f"Enter new binding(s) for '{self.action}' :\n"
          + "(These bindings will not be checked for validity!)",
      )
      advanced_title.pack(anchor="w")
      self.advanced_keys = Entry(
          self.frame_keyseq_advanced, textvariable=self.key_string
      )
      self.advanced_keys.pack(fill="x")
  
      # Advanced entry help text.
      self.frame_help_advanced = Frame(self)
      self.frame_help_advanced.grid(
          row=1, column=0, sticky="nsew", padx=5
      )
      help_advanced = Label(
          self.frame_help_advanced,
          justify="left",
          text="Key bindings are specified using Tkinter keysyms as\n"
          + "in these samples: <Control-f>, <Shift-F2>, <F12>,\n"
          "<Control-space>, <Meta-less>, <Control-Alt-Shift-X>.\n"
          "Upper case is used when the Shift modifier is present!\n\n"
          + "'Emacs style' multi-keystroke bindings are specified as\n"
          + "follows: <Control-x><Control-y>, where the first key\n"
          + "is the 'do-nothing' keybinding.\n\n"
          + "Multiple separate bindings for one action should be\n"
          + "separated by a space, eg., <Alt-v> <Meta-v>.",
      )
      help_advanced.grid(row=0, column=0, sticky="nsew")
  
      # Switch between basic and advanced.
      self.button_level = Button(
          self,
          command=self.toggle_level,
          text="<< Basic Key Binding Entry",
      )
      self.button_level.grid(
          row=2, column=0, stick="ew", padx=5, pady=5
      )
      self.toggle_level()
  
imports: from tkinter import Toplevel, Listbox, StringVar, TclError
  from tkinter.ttk import Frame, Button, Checkbutton, Entry, Label, Scrollbar
  from tkinter import messagebox
  from tkinter.simpledialog import _setup_dialog
  import string
  import sys
label_desc: Use image node_id 3 for calling the GetKeysFrame obj's underlying member method code with example usage: obj.create_widgets() without return types