@@ -279,6 +279,9 @@ def enter_notify_event(self, event):
279279 guiEvent = event , xy = self ._event_mpl_coords (event ))
280280
281281 def button_press_event (self , event , dblclick = False ):
282+ # set focus to the canvas so that it can receive keyboard events
283+ self ._tkcanvas .focus_set ()
284+
282285 num = getattr (event , 'num' , None )
283286 if sys .platform == 'darwin' : # 2 and 3 are reversed.
284287 num = {2 : 3 , 3 : 2 }.get (num , num )
@@ -387,6 +390,12 @@ def stop_event_loop(self):
387390 self ._event_loop_id = None
388391 self ._tkcanvas .quit ()
389392
393+ def set_cursor (self , cursor ):
394+ try :
395+ self ._tkcanvas .configure (cursor = cursord [cursor ])
396+ except tkinter .TclError :
397+ pass
398+
390399
391400class FigureManagerTk (FigureManagerBase ):
392401 """
@@ -467,6 +476,7 @@ def destroy(*args):
467476 Gcf .destroy (self )
468477 self .window .protocol ("WM_DELETE_WINDOW" , destroy )
469478 self .window .deiconify ()
479+ self .canvas ._tkcanvas .focus_set ()
470480 else :
471481 self .canvas .draw_idle ()
472482 if mpl .rcParams ['figure.raise_window' ]:
@@ -629,13 +639,6 @@ def remove_rubberband(self):
629639 lastrect = _api .deprecated ("3.6" )(
630640 property (lambda self : self .canvas ._rubberband_rect ))
631641
632- def set_cursor (self , cursor ):
633- window = self .canvas .get_tk_widget ().master
634- try :
635- window .configure (cursor = cursord [cursor ])
636- except tkinter .TclError :
637- pass
638-
639642 def _set_image_for_button (self , button ):
640643 """
641644 Set the image for a button based on its pixel size.
@@ -840,8 +843,14 @@ def _rescale(self):
840843 def add_toolitem (
841844 self , name , group , position , image_file , description , toggle ):
842845 frame = self ._get_groupframe (group )
843- button = NavigationToolbar2Tk ._Button (self , name , image_file , toggle ,
846+ buttons = frame .pack_slaves ()
847+ if position >= len (buttons ) or position < 0 :
848+ before = None
849+ else :
850+ before = buttons [position ]
851+ button = NavigationToolbar2Tk ._Button (frame , name , image_file , toggle ,
844852 lambda : self ._button_click (name ))
853+ button .pack_configure (before = before )
845854 if description is not None :
846855 ToolTip .createToolTip (button , description )
847856 self ._toolitems .setdefault (name , [])
@@ -853,6 +862,7 @@ def _get_groupframe(self, group):
853862 self ._add_separator ()
854863 frame = tk .Frame (master = self , borderwidth = 0 )
855864 frame .pack (side = tk .LEFT , fill = tk .Y )
865+ frame ._label_font = self ._label_font
856866 self ._groups [group ] = frame
857867 return self ._groups [group ]
858868
0 commit comments