@@ -584,6 +584,8 @@ class NavigationToolbar2Tk(NavigationToolbar2, tk.Frame):
584584 """
585585 def __init__ (self , canvas , window ):
586586 self .canvas = canvas
587+ # Avoid using self.window (prefer self.canvas.manager.window), so that
588+ # Tool implementations can reuse the methods.
587589 self .window = window
588590 NavigationToolbar2 .__init__ (self , canvas )
589591
@@ -602,16 +604,15 @@ def draw_rubberband(self, event, x0, y0, x1, y1):
602604 self .canvas ._tkcanvas .delete (self .lastrect )
603605 self .lastrect = self .canvas ._tkcanvas .create_rectangle (x0 , y0 , x1 , y1 )
604606
605- #self.canvas.draw()
606-
607607 def release (self , event ):
608608 if hasattr (self , "lastrect" ):
609609 self .canvas ._tkcanvas .delete (self .lastrect )
610610 del self .lastrect
611611
612612 def set_cursor (self , cursor ):
613- self .window .configure (cursor = cursord [cursor ])
614- self .window .update_idletasks ()
613+ window = self .canvas .manager .window
614+ window .configure (cursor = cursord [cursor ])
615+ window .update_idletasks ()
615616
616617 def _Button (self , text , file , command , extension = '.gif' ):
617618 img_file = os .path .join (
@@ -684,7 +685,7 @@ def save_figure(self, *args):
684685 initialdir = os .path .expanduser (rcParams ['savefig.directory' ])
685686 initialfile = self .canvas .get_default_filename ()
686687 fname = tkinter .filedialog .asksaveasfilename (
687- master = self .window ,
688+ master = self .canvas . manager . window ,
688689 title = 'Save the figure' ,
689690 filetypes = tk_filetypes ,
690691 defaultextension = defaultextension ,
@@ -765,9 +766,6 @@ def hidetip(self):
765766
766767
767768class RubberbandTk (backend_tools .RubberbandBase ):
768- def __init__ (self , * args , ** kwargs ):
769- backend_tools .RubberbandBase .__init__ (self , * args , ** kwargs )
770-
771769 def draw_rubberband (self , x0 , y0 , x1 , y1 ):
772770 height = self .figure .canvas .figure .bbox .height
773771 y0 = height - y0
@@ -785,7 +783,8 @@ def remove_rubberband(self):
785783
786784class SetCursorTk (backend_tools .SetCursorBase ):
787785 def set_cursor (self , cursor ):
788- self .figure .canvas .manager .window .configure (cursor = cursord [cursor ])
786+ NavigationToolbar2Tk .set_cursor (
787+ self ._make_classic_style_pseudo_toolbar (), cursor )
789788
790789
791790class ToolbarTk (ToolContainerBase , tk .Frame ):
@@ -885,47 +884,8 @@ def set_message(self, s):
885884
886885class SaveFigureTk (backend_tools .SaveFigureBase ):
887886 def trigger (self , * args ):
888- filetypes = self .figure .canvas .get_supported_filetypes ().copy ()
889- default_filetype = self .figure .canvas .get_default_filetype ()
890-
891- # Tk doesn't provide a way to choose a default filetype,
892- # so we just have to put it first
893- default_filetype_name = filetypes .pop (default_filetype )
894- sorted_filetypes = ([(default_filetype , default_filetype_name )]
895- + sorted (filetypes .items ()))
896- tk_filetypes = [(name , '*.%s' % ext ) for ext , name in sorted_filetypes ]
897-
898- # adding a default extension seems to break the
899- # asksaveasfilename dialog when you choose various save types
900- # from the dropdown. Passing in the empty string seems to
901- # work - JDH!
902- # defaultextension = self.figure.canvas.get_default_filetype()
903- defaultextension = ''
904- initialdir = os .path .expanduser (rcParams ['savefig.directory' ])
905- initialfile = self .figure .canvas .get_default_filename ()
906- fname = tkinter .filedialog .asksaveasfilename (
907- master = self .figure .canvas .manager .window ,
908- title = 'Save the figure' ,
909- filetypes = tk_filetypes ,
910- defaultextension = defaultextension ,
911- initialdir = initialdir ,
912- initialfile = initialfile ,
913- )
914-
915- if fname == "" or fname == ():
916- return
917- else :
918- if initialdir == '' :
919- # explicitly missing key or empty str signals to use cwd
920- rcParams ['savefig.directory' ] = initialdir
921- else :
922- # save dir for next time
923- rcParams ['savefig.directory' ] = os .path .dirname (str (fname ))
924- try :
925- # This method will handle the delegation to the correct type
926- self .figure .savefig (fname )
927- except Exception as e :
928- tkinter .messagebox .showerror ("Error saving file" , str (e ))
887+ NavigationToolbar2Tk .save_figure (
888+ self ._make_classic_style_pseudo_toolbar ())
929889
930890
931891class ConfigureSubplotsTk (backend_tools .ConfigureSubplotsBase ):
0 commit comments