Matplotlib NavigationToolbar2Tk doesn't switch between pan and zoom very easily

I have a matplotlib graph and navigation embedded in a tkinter form. The graph plots quite well, however it can be frustrating switching into the 'pan' option or 'zoom' option on the menu bar. Quite often it won't switch mode, but then suddenly at some point it starts working.

I am on a Mac using python 3.7

Any idea's about how to fix this ?

I have included the main bits of code:

This adds the graph:

def __buildGraphAndFrame(self):
    # Add a frame where we will keep the graph
    self.__frmGraph = ttk.Frame(self.master, border=1, relief=tk.SUNKEN)
    self.__frmGraph.grid(row=1, column=0, columnspan=3,
                         sticky=tk.N+tk.S+tk.E+tk.W, padx=10, pady=10)
    FG = self.__frmGraph
    # Configure the frames columns
    FG.grid_columnconfigure(0, weight=1)
    # Set the figure object (figsize is width, height in inches,
    # dpi is dots per inch.)
    FG.__Figure = Figure(figsize=(4, 4), dpi=100)
    # Add the subplot - see https://stackoverflow.com/questions/3584805/
    # in-matplotlib-what-does-the-argument-mean-in-fig-add-subplot111
    FG.__SubPlot = FG.__Figure.add_subplot(111)
    # Create a canvas object
    FG.__Canvas = FigureCanvasTkAgg(FG.__Figure, FG)
    FG.__Canvas.draw()
    FG.__Canvas.get_tk_widget().grid(row=0, column=0, sticky=tk.N+tk.S+tk.E+tk.W,
                     padx=10, pady=10)

This adds the navigation bar:

def __buildNavigationToolbarAndFrame(self):
    # Add a frame where we will keep the graph
    self.__frmNavigation = ttk.Frame(self.master, border=1,
                                     relief=tk.SUNKEN)
    self.__frmNavigation.grid(row=2, column=0, columnspan=3,
                              sticky=tk.N+tk.S+tk.E+tk.W, padx=10, pady=10)
    FN = self.__frmNavigation
    FN.__Toolbar = NavigationToolbar2Tk(self.__frmGraph.__Canvas, FN)
    FN.__Toolbar.update()
    #FN.__Toolbar.pack(padx=10, pady=10)
    FN.__Toolbar.grid(row=0, column=0, sticky=tk.N+tk.S+tk.E+tk.W, padx=10, pady=10)

This updates the graph after data has been adjusted:

....

# Ensure tight layout in the graph so that it is all enclosed in
# the chart.
self.__frmGraph.__Figure.tight_layout()

# redraw the graph.
self.__frmGraph.__Figure.canvas.draw()
self.__frmNavigation.__Toolbar.update()