  
      def __init__(self, parent):
          logger.debug("Initializing %s: (parent: %s)", self.__class__.__name__, parent)
          scaling_factor = get_config().scaling_factor
          width = int(420 * scaling_factor)
          height = int(500 * scaling_factor)
          self.actionbtns = dict()
          super().__init__(parent, width=width, height=height)
          parent.add(self)
  
          self.tools_notebook = ToolsNotebook(self)
 
</s> remove         width = int(720 * scaling_factor)
 </s> add         width = int(600 * scaling_factor) </s> remove     def __init__(self, parent, options, items_per_row=1, radio_columns=4, header_text=None):
        logger.debug("Initializing %s: (parent: '%s', options: %s, items_per_row: %s, "
                     "radio_columns: %s, header_text: %s)",
                     self.__class__.__name__, parent, options, items_per_row, radio_columns,
                     header_text)
 </s> add     def __init__(self, parent, options, label_width=20, columns=1, radio_columns=4,
                 header_text=None, blank_nones=True):
        logger.debug("Initializing %s: (parent: '%s', options: %s, label_width: %s, columns: %s, "
                     "radio_columns: %s, header_text: %s, blank_nones: %s)",
                     self.__class__.__name__, parent, options, label_width, columns, radio_columns,
                     header_text, blank_nones) </s> remove                      choices, is_radio, rounding, min_max, helptext, radio_columns, label_width,
                     control_width)
 </s> add                      choices, is_radio, rounding, min_max, sysbrowser, helptext, radio_columns,
                     label_width, checkbuttons_frame, control_width, blank_nones) </s> remove     def add_info(self):
        """ Plugin information """
        info_frame = ttk.Frame(self.optsframe)
        info_frame.pack(fill=tk.X, expand=True)
        lbl = ttk.Label(info_frame, text="About:", width=20, anchor=tk.W)
        lbl.pack(padx=5, pady=5, side=tk.LEFT, anchor=tk.N)
        info = ttk.Label(info_frame, text=self.header_text)
        info.pack(padx=5, pady=5, fill=tk.X, expand=True)
        info.bind("<Configure>", adjust_wraplength)
 </s> add     def checkbuttons_frame(self, frame):
        """ Build and format frame for holding the check buttons
            if is_master then check buttons will be placed in a LabelFrame
            otherwise in a standard frame """
        logger.debug("Add Options CheckButtons Frame")
        chk_frame = ttk.Frame(frame, name="chkbuttons")
        holder = AutoFillContainer(chk_frame, self.radio_columns)
        logger.debug("Added Options CheckButtons Frame")
        return holder


class AutoFillContainer():
    """ A container object that autofills columns """
    def __init__(self, parent, columns):
        logger.debug("Initializing: %s: (parent: %s, columns: %s)", self.__class__.__name__,
                     parent, columns)
        self.parent = parent
        self.columns = columns
        self._items = 0
        self._idx = 0
        self.subframes = self.set_subframes()
        logger.debug("Initialized: %s: (items: %s)", self.__class__.__name__, self.items)

    @property
    def items(self):
        """ Returns the number if items held in this containter """
        return self._items

    @property
    def subframe(self):
        """ Returns the next subframe to be populated """
        frame = self.subframes[self._idx]
        next_idx = self._idx + 1 if self._idx + 1 != self.columns else 0
        logger.debug("current_idx: %s, next_idx: %s", self._idx, next_idx)
        self._idx = next_idx
        return frame

    @property
    def last_subframe(self):
        """ Returns the last column """
        return self.subframes[self.columns - 1]

    def set_subframes(self):
        """ Set a subrame for each requested column """
        subframes = []
        for idx in range(self.columns):
            if self.columns != 1:
                name = "{}_{}".format(self.parent.winfo_name(), idx)
                subframe = ttk.Frame(self.parent, name=name)
                subframe.pack(padx=5, pady=5, side=tk.LEFT, anchor=tk.N, expand=True, fill=tk.X)
                subframes.append(subframe)
                logger.debug("Added subframe: %s", name)
            else:
                subframes.append(self.parent)
                logger.debug("Using parent as subframe: %s", self.parent.winfo_name())
            self._items += 1
        return subframes </s> remove                  min_max=None, helptext=None, radio_columns=3, label_width=20, control_width=None):
 </s> add                  min_max=None, sysbrowser=None, helptext=None, radio_columns=3, label_width=20,
                 checkbuttons_frame=None, control_width=None, blank_nones=True):
        width = int(470 * scaling_factor)
        root_height = get_config().root.winfo_height()
        height = int(round(root_height * 0.78125))

  
      def __init__(self, parent):
          logger.debug("Initializing %s: (parent: %s)", self.__class__.__name__, parent)
          scaling_factor = get_config().scaling_factor
        width = int(470 * scaling_factor)
        root_height = get_config().root.winfo_height()
        height = int(round(root_height * 0.78125))

        width = int(470 * scaling_factor)
        root_height = get_config().root.winfo_height()
        height = int(round(root_height * 0.78125))

          self.actionbtns = dict()
          super().__init__(parent, width=width, height=height)
          parent.add(self)
  
          self.tools_notebook = ToolsNotebook(self)
keep keep keep keep replace replace keep keep keep keep keep
 GUI Update


- Launch in fullscreen
- Expand Control Helper. Clean up config popup
- Standardize and overhaul GUI for CliOpts 
lib/gui/command.py