  
          btnframe = ttk.Frame(self)
          btnframe.pack(fill=tk.X, padx=5, pady=5, side=tk.RIGHT)
  
          for text, tooltip_text, image_file, callback in self.toolitems:
              if text is None:
                  # Add a spacer; return value is unused.
                  self._Spacer()
              else:
                  button = self._Button(btnframe, text=text, file=image_file,
                                        command=getattr(self, callback))
                  if tooltip_text is not None:
                      Tooltip(button, text=tooltip_text, wrap_length=200)
  
          self.message = tk.StringVar(master=self)
          self._message_label = ttk.Label(master=self, textvariable=self.message)
          self._message_label.pack(side=tk.LEFT, padx=5)
          self.pack(side=tk.BOTTOM, fill=tk.X)
 
</s> remove         self.message = tk.StringVar(master=self)
        self._message_label = ttk.Label(master=self, textvariable=self.message)
        self._message_label.pack(side=tk.LEFT, padx=5)
        self.pack(side=tk.BOTTOM, fill=tk.X)
 </s> add logger: logging.Logger = logging.getLogger(__name__) </s> remove from .custom_widgets import Tooltip  # noqa
from .utils import get_config, get_images, LongRunningTask  # noqa

logger = logging.getLogger(__name__)  # pylint: disable=invalid-name


class NavigationToolbar(NavigationToolbar2Tk):  # pylint: disable=too-many-ancestors
    """ Same as default, but only including buttons we need
        with custom icons and layout
        From: https://stackoverflow.com/questions/12695678 """
    toolitems = [t for t in NavigationToolbar2Tk.toolitems if
                 t[0] in ("Home", "Pan", "Zoom", "Save")]

    @staticmethod
    def _Button(frame, text, file, command, extension=".gif"):  # pylint: disable=arguments-differ
        """ Map Buttons to their own frame.
            Use custom button icons, Use ttk buttons pack to the right """
        iconmapping = {"home": "reload",
                       "filesave": "save",
                       "zoom_to_rect": "zoom"}
        icon = iconmapping[file] if iconmapping.get(file, None) else file
        img = get_images().icons[icon]
        btn = ttk.Button(frame, text=text, image=img, command=command)
        btn.pack(side=tk.RIGHT, padx=2)
        return btn

    def _init_toolbar(self):
        """ Same as original but ttk widgets and standard tool-tips used. Separator added and
            message label packed to the left """
        xmin, xmax = self.canvas.figure.bbox.intervalx
        height, width = 50, xmax-xmin
        ttk.Frame.__init__(self, master=self.window, width=int(width), height=int(height))

        sep = ttk.Frame(self, height=2, relief=tk.RIDGE)
        sep.pack(fill=tk.X, pady=(5, 0), side=tk.TOP)

        self.update()  # Make axes menu

        btnframe = ttk.Frame(self)
        btnframe.pack(fill=tk.X, padx=5, pady=5, side=tk.RIGHT)
 </s> add from .custom_widgets import Tooltip
from .utils import get_config, get_images, LongRunningTask </s> remove         if self.thread is None:
 </s> add         if self._thread is None: </s> remove         if not refresh_var.get() and self.thread is None:
 </s> add         if not refresh_var.get() and self._thread is None: </s> remove             self.thread = LongRunningTask(target=self.calcs.refresh)
            self.thread.start()
 </s> add             self._thread = LongRunningTask(target=self._calcs.refresh)
            self._thread.start()
matplotlib.use("TkAgg")
  
          btnframe = ttk.Frame(self)
          btnframe.pack(fill=tk.X, padx=5, pady=5, side=tk.RIGHT)
  
matplotlib.use("TkAgg")
matplotlib.use("TkAgg")
matplotlib.use("TkAgg")
matplotlib.use("TkAgg")
matplotlib.use("TkAgg")
matplotlib.use("TkAgg")
matplotlib.use("TkAgg")
matplotlib.use("TkAgg")
matplotlib.use("TkAgg")
  
          self.message = tk.StringVar(master=self)
          self._message_label = ttk.Label(master=self, textvariable=self.message)
          self._message_label.pack(side=tk.LEFT, padx=5)
          self.pack(side=tk.BOTTOM, fill=tk.X)
keep keep keep keep replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 Update matplotlib requirement
  - bump min requirement to 3.5.1
  - Fix custom toolbar for v3.5.1
  - Documentation + linting 
lib/gui/display_graph.py