Skip to content

Commit 64f947f

Browse files
committed
tkbackend updated
1 parent 9a64b7e commit 64f947f

File tree

1 file changed

+74
-55
lines changed

1 file changed

+74
-55
lines changed

lib/matplotlib/backends/backend_tkagg.py

Lines changed: 74 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
from matplotlib.backend_bases import RendererBase, GraphicsContextBase
2121
from matplotlib.backend_bases import FigureManagerBase, FigureCanvasBase
2222
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)
2527
from matplotlib._pylab_helpers import Gcf
2628

2729
from matplotlib.figure import Figure
@@ -530,14 +532,19 @@ def __init__(self, canvas, num, window):
530532
self.window.withdraw()
531533
self.set_window_title("Figure %d" % num)
532534
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()
540535
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+
541548
self._shown = False
542549

543550
def notify_axes_change(fig):
@@ -552,15 +559,15 @@ def _get_toolbar(self):
552559
if matplotlib.rcParams['toolbar'] == 'toolbar2':
553560
toolbar = NavigationToolbar2TkAgg(self.canvas, self.window)
554561
elif matplotlib.rcParams['toolbar'] == 'navigation':
555-
toolbar = ToolbarTk(self)
562+
toolbar = ToolbarTk(self.navigation, self.window)
556563
else:
557564
toolbar = None
558565
return toolbar
559566

560567
def _get_navigation(self):
561568
# must be inited after toolbar is setted
562569
if rcParams['toolbar'] != 'toolbar2':
563-
navigation = NavigationTk(self)
570+
navigation = NavigationTk(self.canvas)
564571
else:
565572
navigation = None
566573
return navigation
@@ -894,53 +901,60 @@ def hidetip(self):
894901

895902

896903
class NavigationTk(NavigationBase):
897-
def __init__(self, *args, **kwargs):
898-
NavigationBase.__init__(self, *args, **kwargs)
904+
pass
899905

900-
def set_cursor(self, cursor):
901-
self.canvas.manager.window.configure(cursor=cursord[cursor])
902906

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
907913
y0 = height - y0
908914
y1 = height - y1
909915
try:
910916
self.lastrect
911917
except AttributeError:
912918
pass
913919
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)
916922

917-
def remove_rubberband(self, event, caller):
923+
def remove_rubberband(self):
918924
try:
919925
self.lastrect
920926
except AttributeError:
921927
pass
922928
else:
923-
self.canvas._tkcanvas.delete(self.lastrect)
929+
self.figure.canvas._tkcanvas.delete(self.lastrect)
924930
del self.lastrect
925931

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+
926941

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
931946
height, width = 50, xmax - xmin
932-
Tk.Frame.__init__(self, master=self.manager.window,
947+
Tk.Frame.__init__(self, master=window,
933948
width=int(width), height=int(height),
934949
borderwidth=2)
935950
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)
940952

953+
def add_toolitem(self, name, group, position, image_file, description,
954+
toggle):
941955
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)
944958
self._toolitems[name] = button
945959

946960
def _Button(self, text, image_file, toggle):
@@ -961,31 +975,36 @@ def _Button(self, text, image_file, toggle):
961975
return b
962976

963977
def _button_click(self, name):
964-
self.manager.navigation._toolbar_callback(name)
978+
self.trigger_tool(name)
965979

966-
def _toggle(self, name, callback=False):
980+
def toggle_toolitem(self, name, toggled):
967981
if name not in self._toolitems:
968-
self.set_message('%s Not in toolbar' % name)
969982
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()
982987

983-
def _remove_toolitem(self, name):
988+
def remove_toolitem(self, name):
984989
self._toolitems[name].pack_forget()
985990
del self._toolitems[name]
986991

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)
9891008

9901009

9911010
class SaveFigureTk(SaveFigureBase):
@@ -1046,7 +1065,7 @@ def __init__(self, *args, **kwargs):
10461065
ConfigureSubplotsBase.__init__(self, *args, **kwargs)
10471066
self.window = None
10481067

1049-
def trigger(self, event):
1068+
def trigger(self, *args):
10501069
self.init_window()
10511070
self.window.lift()
10521071

@@ -1069,8 +1088,8 @@ def destroy(self, *args, **kwargs):
10691088
self.window = None
10701089

10711090

1072-
SaveFigure = SaveFigureTk
1073-
ConfigureSubplots = ConfigureSubplotsTk
1091+
ToolSaveFigure = SaveFigureTk
1092+
ToolConfigureSubplots = ConfigureSubplotsTk
10741093
Toolbar = ToolbarTk
10751094
Navigation = NavigationTk
10761095
FigureCanvas = FigureCanvasTkAgg

0 commit comments

Comments
 (0)