@@ -596,6 +596,7 @@ def select_all(self):
596596 a .set (1 )
597597 self .set_active ()
598598
599+
599600class NavigationToolbar (Tk .Frame ):
600601 """
601602 Public attributes
@@ -626,39 +627,39 @@ def __init__(self, canvas, window):
626627 self .update () # Make axes menu
627628
628629 self .bLeft = self ._Button (
629- text = "Left" , file = "stock_left.ppm " ,
630+ text = "Left" , file = "stock_left" ,
630631 command = lambda x = - 1 : self .panx (x ))
631632
632633 self .bRight = self ._Button (
633- text = "Right" , file = "stock_right.ppm " ,
634+ text = "Right" , file = "stock_right" ,
634635 command = lambda x = 1 : self .panx (x ))
635636
636637 self .bZoomInX = self ._Button (
637- text = "ZoomInX" ,file = "stock_zoom-in.ppm " ,
638+ text = "ZoomInX" ,file = "stock_zoom-in" ,
638639 command = lambda x = 1 : self .zoomx (x ))
639640
640641 self .bZoomOutX = self ._Button (
641- text = "ZoomOutX" , file = "stock_zoom-out.ppm " ,
642+ text = "ZoomOutX" , file = "stock_zoom-out" ,
642643 command = lambda x = - 1 : self .zoomx (x ))
643644
644645 self .bUp = self ._Button (
645- text = "Up" , file = "stock_up.ppm " ,
646+ text = "Up" , file = "stock_up" ,
646647 command = lambda y = 1 : self .pany (y ))
647648
648649 self .bDown = self ._Button (
649- text = "Down" , file = "stock_down.ppm " ,
650+ text = "Down" , file = "stock_down" ,
650651 command = lambda y = - 1 : self .pany (y ))
651652
652653 self .bZoomInY = self ._Button (
653- text = "ZoomInY" , file = "stock_zoom-in.ppm " ,
654+ text = "ZoomInY" , file = "stock_zoom-in" ,
654655 command = lambda y = 1 : self .zoomy (y ))
655656
656657 self .bZoomOutY = self ._Button (
657- text = "ZoomOutY" ,file = "stock_zoom-out.ppm " ,
658+ text = "ZoomOutY" ,file = "stock_zoom-out" ,
658659 command = lambda y = - 1 : self .zoomy (y ))
659660
660661 self .bSave = self ._Button (
661- text = "Save" , file = "stock_save_as.ppm " ,
662+ text = "Save" , file = "stock_save_as" ,
662663 command = self .save_figure )
663664
664665 self .pack (side = Tk .BOTTOM , fill = Tk .X )
@@ -763,9 +764,9 @@ def release(self, event):
763764 def set_cursor (self , cursor ):
764765 self .window .configure (cursor = cursord [cursor ])
765766
766- def _Button (self , text , file , command ):
767- file = os .path .join (rcParams ['datapath' ], 'images' , file )
768- im = Tk .PhotoImage (master = self , file = file )
767+ def _Button (self , text , file , command , extension = '.ppm' ):
768+ img_file = os .path .join (rcParams ['datapath' ], 'images' , file + extension )
769+ im = Tk .PhotoImage (master = self , file = img_file )
769770 b = Tk .Button (
770771 master = self , text = text , padx = 2 , pady = 2 , image = im , command = command )
771772 b ._ntimage = im
@@ -781,27 +782,16 @@ def _init_toolbar(self):
781782
782783 self .update () # Make axes menu
783784
784- self .bHome = self ._Button ( text = "Home" , file = "home.ppm" ,
785- command = self .home )
786-
787- self .bBack = self ._Button ( text = "Back" , file = "back.ppm" ,
788- command = self .back )
789-
790- self .bForward = self ._Button (text = "Forward" , file = "forward.ppm" ,
791- command = self .forward )
792-
793- self .bPan = self ._Button ( text = "Pan" , file = "move.ppm" ,
794- command = self .pan )
795-
796- self .bZoom = self ._Button ( text = "Zoom" ,
797- file = "zoom_to_rect.ppm" ,
798- command = self .zoom )
799-
800- self .bsubplot = self ._Button ( text = "Configure Subplots" , file = "subplots.ppm" ,
801- command = self .configure_subplots )
802-
803- self .bsave = self ._Button ( text = "Save" , file = "filesave.ppm" ,
804- command = self .save_figure )
785+ for text , tooltip_text , image_file , callback in self .toolitems :
786+ if text is None :
787+ # spacer, unhandled in Tk
788+ pass
789+ else :
790+ button = self ._Button (text = text , file = image_file ,
791+ command = getattr (self , callback ))
792+ if tooltip_text is not None :
793+ ToolTip .createToolTip (button , tooltip_text )
794+
805795 self .message = Tk .StringVar (master = self )
806796 self ._message_label = Tk .Label (master = self , textvariable = self .message )
807797 self ._message_label .pack (side = Tk .RIGHT )
@@ -879,3 +869,54 @@ def dynamic_update(self):
879869
880870
881871FigureManager = FigureManagerTkAgg
872+
873+
874+ class ToolTip (object ):
875+ """
876+ Tooltip recipe from
877+ http://www.voidspace.org.uk/python/weblog/arch_d7_2006_07_01.shtml#e387
878+ """
879+ @staticmethod
880+ def createToolTip (widget , text ):
881+ toolTip = ToolTip (widget )
882+ def enter (event ):
883+ toolTip .showtip (text )
884+ def leave (event ):
885+ toolTip .hidetip ()
886+ widget .bind ('<Enter>' , enter )
887+ widget .bind ('<Leave>' , leave )
888+
889+ def __init__ (self , widget ):
890+ self .widget = widget
891+ self .tipwindow = None
892+ self .id = None
893+ self .x = self .y = 0
894+
895+ def showtip (self , text ):
896+ "Display text in tooltip window"
897+ self .text = text
898+ if self .tipwindow or not self .text :
899+ return
900+ x , y , _ , _ = self .widget .bbox ("insert" )
901+ x = x + self .widget .winfo_rootx () + 27
902+ y = y + self .widget .winfo_rooty ()
903+ self .tipwindow = tw = Tk .Toplevel (self .widget )
904+ tw .wm_overrideredirect (1 )
905+ tw .wm_geometry ("+%d+%d" % (x , y ))
906+ try :
907+ # For Mac OS
908+ tw .tk .call ("::tk::unsupported::MacWindowStyle" ,
909+ "style" , tw ._w ,
910+ "help" , "noActivates" )
911+ except Tk .TclError :
912+ pass
913+ label = Tk .Label (tw , text = self .text , justify = Tk .LEFT ,
914+ background = "#ffffe0" , relief = Tk .SOLID , borderwidth = 1 ,
915+ )
916+ label .pack (ipadx = 1 )
917+
918+ def hidetip (self ):
919+ tw = self .tipwindow
920+ self .tipwindow = None
921+ if tw :
922+ tw .destroy ()
0 commit comments