                                 for idx, child in enumerate(children)]
          logger.debug("Compiled AutoFillContainer children: %s", self._widget_config)
  
      def get_all_children_config(self, widget, child_list):
          """ Return all children, recursively, of given widget """
          for child in widget.winfo_children():
              if child.winfo_ismapped():
                  id_ = str(child)
                  if child.__class__.__name__ == "MultiOption":
                      # MultiOption checkbox groups are a custom object with additional parameter
 
</s> remove                                 "custom_kwargs": dict()}
 </s> add                                 "custom_kwargs": self._custom_kwargs(child)} </s> remove             if child.winfo_ismapped():
                id_ = str(child)
                if child.__class__.__name__ == "MultiOption":
                    # MultiOption checkbox groups are a custom object with additional parameter
                    # requirements.
                    custom_kwargs = dict(
                        value=child._value,  # pylint:disable=protected-access
                        variable=child._master_variable)  # pylint:disable=protected-access
                else:
                    custom_kwargs = dict()
 </s> add             # Hidden Toggle Frame boxes need to be mapped
            if child.winfo_ismapped() or "toggledframe_subframe" in str(child):
                not_mapped = not child.winfo_ismapped()
                # ToggleFrame is a custom widget that creates it's own children and handles
                # bindings on the headers, to auto-hide the contents. To ensure that all child
                # information (specifically pack information) can be collected, we need to pack
                # any hidden sub-frames. These are then hidden again once collected.
                if not_mapped and (child.winfo_name() == "toggledframe_subframe" or
                                   child.winfo_name() == "chkbuttons"):
                    child.pack(fill=tk.X, expand=True)
                    child.update_idletasks()  # Updates the packing info of children
                    unpack.add(child)

                if child.winfo_name().startswith("toggledframe_header"):
                    # Headers should be entirely handled by parent widget
                    continue </s> remove         """ Compile all children recursively in correct order if not already compiled """
 </s> add         """ Compile all children recursively in correct order if not already compiled and add
        to :attr:`_widget_config` """ </s> remove         """ Widgets cannot be given a new parent so we need to clone
            them and then pack the new widget """
 </s> add         """ Recursively pass through the list of widgets creating clones and packing all
        children.

        Widgets cannot be given a new parent so we need to clone them and then pack the
        new widgets.

        Parameters
        ----------
        widget_dicts: list
            List of dictionaries, in appearance order, of widget information for cloning widgets
        old_childen: list, optional
            Used for recursion. Leave at ``None``
        new_childen: list, optional
            Used for recursion. Leave at ``None``
        """ </s> remove         """ Return a new group frame """
 </s> add         """ Return a group frame.

        If a group frame has already been created for the given group, then it will be returned,
        otherwise it will be created and returned.

        Parameters
        ----------
        group: str
            The name of the group to obtain the group frame for

        Returns
        -------
        :class:`ttk.Frame` or :class:`ToggledFrame`
            If this is a 'master' group frame then returns a standard frame. If this is any
            other group, then will return the ToggledFrame for that group
        """
        """ Return all children, recursively, of given widget.

        Parameters
        ----------
        widget: tkinter widget
            The widget to recursively obtain the configurations of each child
        child_list: list
            The list of child configurations already collected

        Returns
        -------
        list
            The list of configurations for all recursive children of the given widget
         """
        unpack = set()
                                 for idx, child in enumerate(children)]
          logger.debug("Compiled AutoFillContainer children: %s", self._widget_config)
  
      def get_all_children_config(self, widget, child_list):
        """ Return all children, recursively, of given widget.

        Parameters
        ----------
        widget: tkinter widget
            The widget to recursively obtain the configurations of each child
        child_list: list
            The list of child configurations already collected

        Returns
        -------
        list
            The list of configurations for all recursive children of the given widget
         """
        unpack = set()
          for child in widget.winfo_children():
              if child.winfo_ismapped():
                  id_ = str(child)
                  if child.__class__.__name__ == "MultiOption":
                      # MultiOption checkbox groups are a custom object with additional parameter
keep keep keep keep replace keep keep keep keep keep
 GUI - Make groups collapsible 
lib/gui/control_helper.py