          logger.debug("Initializing: %s: (parent, %s, selected_id: %s, helptext: '%s')",
                       self.__class__.__name__, parent, selected_id, helptext)
          super().__init__(parent)
          self._selected_id = selected_id
          self._popup_positions = list()
  
          self._canvas = tk.Canvas(self, bd=0, highlightthickness=0)
          tree_frame = ttk.Frame(self._canvas)
          self._tree_canvas = self._canvas.create_window((0, 0), window=tree_frame, anchor=tk.NW)
          self._sub_frame = ttk.Frame(tree_frame)
 
</s> remove         return "{} - {}".format(title, model_dir)

    def _data_popup_get_position(self):
        """ Get the position of the next window to pop the summary graph to.

        Returns
        -------
        list
            The [x, y] co-ordinates that the pop up window should be placed at
        """
        logger.debug("getting poup position")
        init_pos = [120, 120]
        pos = init_pos
        while True:
            if pos not in self._popup_positions:
                self._popup_positions.append(pos)
                break
            pos = [item + 200 for item in pos]
            init_pos, pos = self._data_popup_check_boundaries(init_pos, pos)
        logger.debug("Position: %s", pos)
        return pos

    def _data_popup_check_boundaries(self, initial_position, position):
        """ Check that the popup remains within the screen boundaries.

        Parameters
        ----------
        initial_position: list
            The [x, y] position of the last displayed popup window
        position: list
            The requested [x, y] position for the new popup window

        Returns
        -------
        tuple
            The original initial_position and position, adjusted if the new window would go out of
            bounds
        """
        logger.debug("Checking poup boundaries: (initial_position: %s, position: %s)",
                     initial_position, position)
        boundary_x = self.winfo_screenwidth() - 120
        boundary_y = self.winfo_screenheight() - 120
        if position[0] >= boundary_x or position[1] >= boundary_y:
            initial_position = [initial_position[0] + 50, initial_position[1]]
            position = initial_position
        logger.debug("Returning poup boundaries: (initial_position: %s, position: %s)",
                     initial_position, position)
        return initial_position, position
 </s> add         return f"{title} - {model_dir}" </s> remove             title = "{} Model: Session #{}".format(model_name.title(), selected_id)
 </s> add             title = f"{model_name.title()} Model: Session #{selected_id}" </s> remove             cmd = getattr(self._parent, "_{}_session".format(btntype))
 </s> add             cmd = getattr(self._parent, f"_{btntype}_session") </s> remove         position = self._data_popup_get_position()
 </s> add         root = get_config().root
        offset = (root.winfo_x() + 20, root.winfo_y() + 20) </s> remove         buttons = dict()
 </s> add         buttons = {}
          logger.debug("Initializing: %s: (parent, %s, selected_id: %s, helptext: '%s')",
                       self.__class__.__name__, parent, selected_id, helptext)
          super().__init__(parent)
          self._selected_id = selected_id

  
          self._canvas = tk.Canvas(self, bd=0, highlightthickness=0)
          tree_frame = ttk.Frame(self._canvas)
          self._tree_canvas = self._canvas.create_window((0, 0), window=tree_frame, anchor=tk.NW)
          self._sub_frame = ttk.Frame(tree_frame)
keep keep keep keep replace keep keep keep keep keep
 Graph popup - Always open in same position 
lib/gui/display_analysis.py