      @staticmethod
      def config_cleaner(widget):
          """ Some options don't like to be copied, so this returns a cleaned
              configuration from a widget
              We use config() instead of configure() because some items (TScale) do
              not populate configure()"""
          new_config = dict()
          for key in widget.config():
              if key == "class":
                  continue
 
</s> remove class ReadOnlyText(tk.Text):  # pylint: disable=too-many-ancestors
    """ A read only text widget that redirects a standard tk.Text widget's insert and delete
    attributes.
    Source: https://stackoverflow.com/questions/3842155
 </s> add class Config():
    """ The centralized configuration class for holding items that should be made available to all
    parts of the GUI.

    This class should be initialized on GUI startup through :func:`initialize_config`. Any further
    access to this class should be through :func:`get_config`.

    Parameters
    ----------
    root: :class:`tkinter.Tk`
        The root Tkinter object
    cli_opts: :class:`lib.gui.options.CliOpts`
        The command line options object
    statusbar: :class:`lib.gui.custom_widgets.StatusBar`
        The GUI Status bar
    session: :class:`lib.gui.stats.Session`
        The current training Session </s> remove         """ Returns the number of items held in this containter """
 </s> add         """ Returns the number of items held in this container """ </s> remove     # TODO Expand out for cli options
 </s> add  </s> remove             info.bind("<Configure>", adjust_wraplength)
 </s> add             info.bind("<Configure>", self._adjust_wraplength)
            We use config() instead of configure() because some items (ttk Scale) do
      @staticmethod
      def config_cleaner(widget):
          """ Some options don't like to be copied, so this returns a cleaned
              configuration from a widget
            We use config() instead of configure() because some items (ttk Scale) do
              not populate configure()"""
          new_config = dict()
          for key in widget.config():
              if key == "class":
                  continue
keep keep keep keep replace keep keep keep keep keep
 GUI Updates (#940)

* lib.gui: Update icons
* tools.cli: Add video filetype flag to mask input
* lib.gui.popup_configure: Refresh GUI on config save
* lib.gui._config: Add Icon size and load last session options
* lib.gui.control_helper - Add control modification tracking
* lib.gui - Add Projects and Last Session
- Main root title handled by projects
- Add Hotkeys
- Create projects module
- split fsw and fst filetypes
- Add last_session saving

* lib.project
- Documentation
- Ask confirm on closing unsaved project
-Fixups

* Track model folder changes
- Shuffle some globals
- Activate System Verbosity for GUI

* lib.gui.utils - Documentation and clean up
- lib.gui.custom_widgets - Create and document

* Add GUI config option to disable auto loading model stats 
lib/gui/control_helper.py