@@ -628,7 +628,7 @@ def __init__(self, canvas, window=None, *, pack_toolbar=True):
628628 command = getattr (self , callback ),
629629 )
630630 if tooltip_text is not None :
631- ToolTip . createToolTip (button , tooltip_text )
631+ add_tooltip (button , tooltip_text )
632632
633633 self ._label_font = tkinter .font .Font (root = window , size = 10 )
634634
@@ -889,62 +889,44 @@ def set_history_buttons(self):
889889 state_map = {True : tk .NORMAL , False : tk .DISABLED }
890890 can_back = self ._nav_stack ._pos > 0
891891 can_forward = self ._nav_stack ._pos < len (self ._nav_stack ) - 1
892-
893892 if "Back" in self ._buttons :
894893 self ._buttons ['Back' ]['state' ] = state_map [can_back ]
895-
896894 if "Forward" in self ._buttons :
897895 self ._buttons ['Forward' ]['state' ] = state_map [can_forward ]
898896
899897
900- class ToolTip :
901- """
902- Tooltip recipe from
903- http://www.voidspace.org.uk/python/weblog/arch_d7_2006_07_01.shtml#e387
904- """
905- @staticmethod
906- def createToolTip (widget , text ):
907- toolTip = ToolTip (widget )
908- def enter (event ):
909- toolTip .showtip (text )
910- def leave (event ):
911- toolTip .hidetip ()
912- widget .bind ('<Enter>' , enter )
913- widget .bind ('<Leave>' , leave )
914-
915- def __init__ (self , widget ):
916- self .widget = widget
917- self .tipwindow = None
918- self .id = None
919- self .x = self .y = 0
920-
921- def showtip (self , text ):
898+ def add_tooltip (widget , text ):
899+ tipwindow = None
900+
901+ def showtip (event ):
922902 """Display text in tooltip window."""
923- self . text = text
924- if self . tipwindow or not self . text :
903+ nonlocal tipwindow
904+ if tipwindow or not text :
925905 return
926- x , y , _ , _ = self .widget .bbox ("insert" )
927- x = x + self .widget .winfo_rootx () + self .widget .winfo_width ()
928- y = y + self .widget .winfo_rooty ()
929- self .tipwindow = tw = tk .Toplevel (self .widget )
930- tw .wm_overrideredirect (1 )
931- tw .wm_geometry ("+%d+%d" % (x , y ))
932- try :
933- # For Mac OS
934- tw .tk .call ("::tk::unsupported::MacWindowStyle" ,
935- "style" , tw ._w ,
936- "help" , "noActivates" )
906+ x , y , _ , _ = widget .bbox ("insert" )
907+ x = x + widget .winfo_rootx () + widget .winfo_width ()
908+ y = y + widget .winfo_rooty ()
909+ tipwindow = tk .Toplevel (widget )
910+ tipwindow .overrideredirect (1 )
911+ tipwindow .geometry (f"+{ x } +{ y } " )
912+ try : # For Mac OS
913+ tipwindow .tk .call ("::tk::unsupported::MacWindowStyle" ,
914+ "style" , tipwindow ._w ,
915+ "help" , "noActivates" )
937916 except tk .TclError :
938917 pass
939- label = tk .Label (tw , text = self . text , justify = tk .LEFT ,
918+ label = tk .Label (tipwindow , text = text , justify = tk .LEFT ,
940919 relief = tk .SOLID , borderwidth = 1 )
941920 label .pack (ipadx = 1 )
942921
943- def hidetip (self ):
944- tw = self .tipwindow
945- self .tipwindow = None
946- if tw :
947- tw .destroy ()
922+ def hidetip (event ):
923+ nonlocal tipwindow
924+ if tipwindow :
925+ tipwindow .destroy ()
926+ tipwindow = None
927+
928+ widget .bind ("<Enter>" , showtip )
929+ widget .bind ("<Leave>" , hidetip )
948930
949931
950932@backend_tools ._register_tool_class (FigureCanvasTk )
@@ -999,7 +981,7 @@ def add_toolitem(
999981 lambda : self ._button_click (name ))
1000982 button .pack_configure (before = before )
1001983 if description is not None :
1002- ToolTip . createToolTip (button , description )
984+ add_tooltip (button , description )
1003985 self ._toolitems .setdefault (name , [])
1004986 self ._toolitems [name ].append (button )
1005987
0 commit comments