          value = min(steps, key=lambda x: abs(x - int(float(value))))
          var.set(value)
  
  
  def adjust_wraplength(event):
      """ dynamically adjust the wraplength of a label on event """
      label = event.widget
      label.configure(wraplength=event.width - 1)
  
  
  class ControlPanelOption():
      """
      A class to hold a control panel option. A list of these is expected
      to be passed to the ControlPanel object.
  
 
</s> remove     """ Set the underlying variable to correct number based on slider rounding """
 </s> add     """ Set the value of sliders underlying variable based on their datatype,
    rounding value and min/max.

    Parameters
    ----------
    var: tkinter.Var
        The variable to set the value for
    d_type: [:class:`int`, :class:`float`]
        The type of value that is stored in :attr:`var`
    round_to: int
        If :attr:`dtype` is :class:`float` then this is the decimal place rounding for :attr:`var`.
        If :attr:`dtype` is :class:`int` then this is the number of steps between each increment
        for :attr:`var`
    min_max: tuple (`int`, `int`)
        The (``min``, ``max``) values that this slider accepts
    """ </s> remove     checkbuttons_frame: tk.frame
        If a checkbutton frame is passed in, then checkbuttons will be placed in this frame
 </s> add     checkbuttons_frame: tkinter.frame
        If a check-button frame is passed in, then check-buttons will be placed in this frame </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         Number of options to put on a single row for checkbuttons/radiobuttons
 </s> add         Number of options to put on a single row for check-buttons/radio-buttons
          value = min(steps, key=lambda x: abs(x - int(float(value))))
          var.set(value)
  
  






  class ControlPanelOption():
      """
      A class to hold a control panel option. A list of these is expected
      to be passed to the ControlPanel object.
  
keep keep keep keep replace replace replace replace replace 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