20
20
from matplotlib .backend_bases import RendererBase , GraphicsContextBase
21
21
from matplotlib .backend_bases import FigureManagerBase , FigureCanvasBase
22
22
from matplotlib .backend_bases import NavigationToolbar2 , cursors , TimerBase
23
- from matplotlib .backend_bases import ShowBase , ToolbarBase , NavigationBase
24
- from matplotlib .backend_tools import SaveFigureBase , ConfigureSubplotsBase , tools
23
+ from matplotlib .backend_bases import (ShowBase , ToolContainerBase ,
24
+ NavigationBase , StatusbarBase )
25
+ from matplotlib .backend_tools import (SaveFigureBase , ConfigureSubplotsBase ,
26
+ tools , toolbar_tools , SetCursorBase , RubberbandBase )
25
27
from matplotlib ._pylab_helpers import Gcf
26
28
27
29
from matplotlib .figure import Figure
@@ -530,14 +532,19 @@ def __init__(self, canvas, num, window):
530
532
self .window .withdraw ()
531
533
self .set_window_title ("Figure %d" % num )
532
534
self .canvas = canvas
533
- self ._num = num
534
- if matplotlib .rcParams ['toolbar' ]== 'toolbar2' :
535
- self .toolbar = NavigationToolbar2TkAgg ( canvas , self .window )
536
- else :
537
- self .toolbar = None
538
- if self .toolbar is not None :
539
- self .toolbar .update ()
540
535
self .canvas ._tkcanvas .pack (side = Tk .TOP , fill = Tk .BOTH , expand = 1 )
536
+ self ._num = num
537
+
538
+ self .navigation = self ._get_navigation ()
539
+ self .toolbar = self ._get_toolbar ()
540
+ self .statusbar = None
541
+
542
+ if matplotlib .rcParams ['toolbar' ] == 'navigation' :
543
+ self .navigation .add_tools (tools )
544
+ self .toolbar .add_tools (toolbar_tools )
545
+ self .statusbar = StatusbarTk (self .window , self .navigation )
546
+
547
+
541
548
self ._shown = False
542
549
543
550
def notify_axes_change (fig ):
@@ -552,15 +559,15 @@ def _get_toolbar(self):
552
559
if matplotlib .rcParams ['toolbar' ] == 'toolbar2' :
553
560
toolbar = NavigationToolbar2TkAgg (self .canvas , self .window )
554
561
elif matplotlib .rcParams ['toolbar' ] == 'navigation' :
555
- toolbar = ToolbarTk (self )
562
+ toolbar = ToolbarTk (self . navigation , self . window )
556
563
else :
557
564
toolbar = None
558
565
return toolbar
559
566
560
567
def _get_navigation (self ):
561
568
# must be inited after toolbar is setted
562
569
if rcParams ['toolbar' ] != 'toolbar2' :
563
- navigation = NavigationTk (self )
570
+ navigation = NavigationTk (self . canvas )
564
571
else :
565
572
navigation = None
566
573
return navigation
@@ -894,53 +901,60 @@ def hidetip(self):
894
901
895
902
896
903
class NavigationTk (NavigationBase ):
897
- def __init__ (self , * args , ** kwargs ):
898
- NavigationBase .__init__ (self , * args , ** kwargs )
904
+ pass
899
905
900
- def set_cursor (self , cursor ):
901
- self .canvas .manager .window .configure (cursor = cursord [cursor ])
902
906
903
- def draw_rubberband (self , event , caller , x0 , y0 , x1 , y1 ):
904
- if not self .canvas .widgetlock .available (caller ):
905
- return
906
- height = self .canvas .figure .bbox .height
907
+ class RubberbandTk (RubberbandBase ):
908
+ def __init__ (self , * args , ** kwargs ):
909
+ RubberbandBase .__init__ (self , * args , ** kwargs )
910
+
911
+ def draw_rubberband (self , x0 , y0 , x1 , y1 ):
912
+ height = self .figure .canvas .figure .bbox .height
907
913
y0 = height - y0
908
914
y1 = height - y1
909
915
try :
910
916
self .lastrect
911
917
except AttributeError :
912
918
pass
913
919
else :
914
- self .canvas ._tkcanvas .delete (self .lastrect )
915
- self .lastrect = self .canvas ._tkcanvas .create_rectangle (x0 , y0 , x1 , y1 )
920
+ self .figure . canvas ._tkcanvas .delete (self .lastrect )
921
+ self .lastrect = self .figure . canvas ._tkcanvas .create_rectangle (x0 , y0 , x1 , y1 )
916
922
917
- def remove_rubberband (self , event , caller ):
923
+ def remove_rubberband (self ):
918
924
try :
919
925
self .lastrect
920
926
except AttributeError :
921
927
pass
922
928
else :
923
- self .canvas ._tkcanvas .delete (self .lastrect )
929
+ self .figure . canvas ._tkcanvas .delete (self .lastrect )
924
930
del self .lastrect
925
931
932
+ ToolRubberband = RubberbandTk
933
+
934
+
935
+ class SetCursorTk (SetCursorBase ):
936
+ def set_cursor (self , cursor ):
937
+ self .figure .canvas .manager .window .configure (cursor = cursord [cursor ])
938
+
939
+ ToolSetCursor = SetCursorTk
940
+
926
941
927
- class ToolbarTk (ToolbarBase , Tk .Frame ):
928
- def __init__ (self , manager ):
929
- ToolbarBase .__init__ (self , manager )
930
- xmin , xmax = self .manager .canvas .figure .bbox .intervalx
942
+ class ToolbarTk (ToolContainerBase , Tk .Frame ):
943
+ def __init__ (self , navigation , window ):
944
+ ToolContainerBase .__init__ (self , navigation )
945
+ xmin , xmax = self .navigation .canvas .figure .bbox .intervalx
931
946
height , width = 50 , xmax - xmin
932
- Tk .Frame .__init__ (self , master = self . manager . window ,
947
+ Tk .Frame .__init__ (self , master = window ,
933
948
width = int (width ), height = int (height ),
934
949
borderwidth = 2 )
935
950
self ._toolitems = {}
936
- self ._add_message ()
937
-
938
- def _add_toolitem (self , name , tooltip_text , image_file , position ,
939
- toggle ):
951
+ self .pack (side = Tk .TOP , fill = Tk .X )
940
952
953
+ def add_toolitem (self , name , group , position , image_file , description ,
954
+ toggle ):
941
955
button = self ._Button (name , image_file , toggle )
942
- if tooltip_text is not None :
943
- ToolTip .createToolTip (button , tooltip_text )
956
+ if description is not None :
957
+ ToolTip .createToolTip (button , description )
944
958
self ._toolitems [name ] = button
945
959
946
960
def _Button (self , text , image_file , toggle ):
@@ -961,31 +975,36 @@ def _Button(self, text, image_file, toggle):
961
975
return b
962
976
963
977
def _button_click (self , name ):
964
- self .manager . navigation . _toolbar_callback (name )
978
+ self .trigger_tool (name )
965
979
966
- def _toggle (self , name , callback = False ):
980
+ def toggle_toolitem (self , name , toggled ):
967
981
if name not in self ._toolitems :
968
- self .set_message ('%s Not in toolbar' % name )
969
982
return
970
- self ._toolitems [name ].toggle ()
971
- if callback :
972
- self ._button_click (name )
973
-
974
- def _add_message (self ):
975
- self .message = Tk .StringVar (master = self )
976
- self ._message_label = Tk .Label (master = self , textvariable = self .message )
977
- self ._message_label .pack (side = Tk .RIGHT )
978
- self .pack (side = Tk .BOTTOM , fill = Tk .X )
979
-
980
- def set_message (self , s ):
981
- self .message .set (s )
983
+ if toggled :
984
+ self ._toolitems [name ].select ()
985
+ else :
986
+ self ._toolitems [name ].deselect ()
982
987
983
- def _remove_toolitem (self , name ):
988
+ def remove_toolitem (self , name ):
984
989
self ._toolitems [name ].pack_forget ()
985
990
del self ._toolitems [name ]
986
991
987
- def set_toolitem_visibility (self , name , visible ):
988
- pass
992
+
993
+ class StatusbarTk (StatusbarBase , Tk .Frame ):
994
+ def __init__ (self , window , * args , ** kwargs ):
995
+ StatusbarBase .__init__ (self , * args , ** kwargs )
996
+ xmin , xmax = self .navigation .canvas .figure .bbox .intervalx
997
+ height , width = 50 , xmax - xmin
998
+ Tk .Frame .__init__ (self , master = window ,
999
+ width = int (width ), height = int (height ),
1000
+ borderwidth = 2 )
1001
+ self ._message = Tk .StringVar (master = self )
1002
+ self ._message_label = Tk .Label (master = self , textvariable = self ._message )
1003
+ self ._message_label .pack (side = Tk .RIGHT )
1004
+ self .pack (side = Tk .TOP , fill = Tk .X )
1005
+
1006
+ def set_message (self , s ):
1007
+ self ._message .set (s )
989
1008
990
1009
991
1010
class SaveFigureTk (SaveFigureBase ):
@@ -1046,7 +1065,7 @@ def __init__(self, *args, **kwargs):
1046
1065
ConfigureSubplotsBase .__init__ (self , * args , ** kwargs )
1047
1066
self .window = None
1048
1067
1049
- def trigger (self , event ):
1068
+ def trigger (self , * args ):
1050
1069
self .init_window ()
1051
1070
self .window .lift ()
1052
1071
@@ -1069,8 +1088,8 @@ def destroy(self, *args, **kwargs):
1069
1088
self .window = None
1070
1089
1071
1090
1072
- SaveFigure = SaveFigureTk
1073
- ConfigureSubplots = ConfigureSubplotsTk
1091
+ ToolSaveFigure = SaveFigureTk
1092
+ ToolConfigureSubplots = ConfigureSubplotsTk
1074
1093
Toolbar = ToolbarTk
1075
1094
Navigation = NavigationTk
1076
1095
FigureCanvas = FigureCanvasTkAgg
0 commit comments