          bottomcontainer = ttk.Frame(maincontainer, height=150)
          maincontainer.add(bottomcontainer)
  
          logger.debug("Added containers")
          return topcontainer, bottomcontainer
  
      def close_app(self):
          """ Close Python. This is here because the graph
              animation function continues to run even when
              tkinter has gone away """
 
</s> remove         bottomcontainer = ttk.Frame(maincontainer, height=150)
 </s> add         bottomcontainer = ttk.Frame(maincontainer, name="frame_bottom") </s> remove                                       sashrelief=tk.RAISED,
                                      orient=tk.HORIZONTAL)
 </s> add                                       sashrelief=tk.RIDGE,
                                      sashwidth=4,
                                      sashpad=8,
                                      orient=tk.HORIZONTAL,
                                      name="pw_top") </s> remove         CommandNotebook(topcontainer)
        DisplayNotebook(topcontainer)
        ConsoleOut(bottomcontainer, debug_console)
 </s> add         self.objects["command"] = CommandNotebook(self.objects["containers"]["top"])
        self.objects["display"] = DisplayNotebook(self.objects["containers"]["top"])
        self.objects["console"] = ConsoleOut(self.objects["containers"]["bottom"], debug_console)
        self.set_initial_focus()
        self.set_layout() </s> remove         topcontainer, bottomcontainer = self.add_containers()
 </s> add         self.add_containers()
    @staticmethod
    def set_initial_focus():
        """ Set the tab focus from settings """
        config = get_config()
        tab = config.user_config_dict["tab"]
        logger.debug("Setting focus for tab: %s", tab)
        tabs = config.command_tabs
        if tab in tabs:
            config.command_notebook.select(tabs[tab])
        else:
            tool_tabs = config.tools_command_tabs
            if tab in tool_tabs:
                config.command_notebook.select(tabs["tools"])
                config.command_notebook.tools_notebook.select(tool_tabs[tab])
        logger.debug("Focus set to: %s", tab)

    def set_layout(self):
        """ Set initial layout """
        self.update_idletasks()
        root = get_config().root
        config = get_config().user_config_dict
        r_width = root.winfo_width()
        r_height = root.winfo_height()
        w_ratio = config["options_panel_width"] / 100.0
        h_ratio = 1 - (config["console_panel_height"] / 100.0)
        width = round(r_width * w_ratio)
        height = round(r_height * h_ratio)
        logger.debug("Setting Initial Layout: (root_width: %s, root_height: %s, width_ratio: %s, "
                     "height_ratio: %s, width: %s, height: %s", r_width, r_height, w_ratio,
                     h_ratio, width, height)
        self.objects["containers"]["top"].sash_place(0, width, 1)
        self.objects["containers"]["main"].sash_place(0, 1, height)
        self.update_idletasks()
          bottomcontainer = ttk.Frame(maincontainer, height=150)
          maincontainer.add(bottomcontainer)
  
          logger.debug("Added containers")
    @staticmethod
    def set_initial_focus():
        """ Set the tab focus from settings """
        config = get_config()
        tab = config.user_config_dict["tab"]
        logger.debug("Setting focus for tab: %s", tab)
        tabs = config.command_tabs
        if tab in tabs:
            config.command_notebook.select(tabs[tab])
        else:
            tool_tabs = config.tools_command_tabs
            if tab in tool_tabs:
                config.command_notebook.select(tabs["tools"])
                config.command_notebook.tools_notebook.select(tool_tabs[tab])
        logger.debug("Focus set to: %s", tab)

    def set_layout(self):
        """ Set initial layout """
        self.update_idletasks()
        root = get_config().root
        config = get_config().user_config_dict
        r_width = root.winfo_width()
        r_height = root.winfo_height()
        w_ratio = config["options_panel_width"] / 100.0
        h_ratio = 1 - (config["console_panel_height"] / 100.0)
        width = round(r_width * w_ratio)
        height = round(r_height * h_ratio)
        logger.debug("Setting Initial Layout: (root_width: %s, root_height: %s, width_ratio: %s, "
                     "height_ratio: %s, width: %s, height: %s", r_width, r_height, w_ratio,
                     h_ratio, width, height)
        self.objects["containers"]["top"].sash_place(0, width, 1)
        self.objects["containers"]["main"].sash_place(0, 1, height)
        self.update_idletasks()
  
      def close_app(self):
          """ Close Python. This is here because the graph
              animation function continues to run even when
              tkinter has gone away """
keep keep keep keep replace keep keep keep keep keep
 Gui Updates (#847)

* GUI Improvements

 - Add basic GUI Config options (available in settings menu)
 - Dynamically add/remove columns on settings panel resize
 - Wrap text properly on info headers
 - Fix helptext formatting for configs
 - Standardize Tooltip widths
 - [code] Apply some widget naming
 - [code] Rename radio_columns to option_columns
 - [code] fix column count checking
 - Add Starting Tab config item
 - Add info boxes to main pages
 - Global font settings
 - Add resources to help menu 
scripts/gui.py