Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b896076

Browse files
committed
Use _make_classic_style_pseudo_toolbar more.
Looks like a few opportunities were missed in the conversion. The Tk _rubberband_rect has to move to the canvas instance (consistently with other backends), as hanging it off the temporary pseudo-toolbar won't work. Also fix the inheritance of ConfigureSubplotGTK, while we're at it, and delete the private _get_canvas method, which is not used anywhere in the codebase.
1 parent 1535cdc commit b896076

File tree

5 files changed

+31
-55
lines changed

5 files changed

+31
-55
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
``lastrect``
2+
~~~~~~~~~~~~
3+
The ``lastrect`` attribute of ``NavigationToolbar2Tk`` and ``RubberbandTk`` is
4+
deprecated.

lib/matplotlib/backends/_backend_gtk.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,7 @@ def remove_rubberband(self):
151151
self._make_classic_style_pseudo_toolbar())
152152

153153

154-
class ConfigureSubplotsGTK(backend_tools.ConfigureSubplotsBase, Gtk.Window):
155-
def _get_canvas(self, fig):
156-
return self.canvas.__class__(fig)
157-
154+
class ConfigureSubplotsGTK(backend_tools.ConfigureSubplotsBase):
158155
def trigger(self, *args):
159156
_NavigationToolbar2GTK.configure_subplots(
160157
self._make_classic_style_pseudo_toolbar(), None)

lib/matplotlib/backends/_backend_tk.py

Lines changed: 22 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
_Backend, FigureCanvasBase, FigureManagerBase, NavigationToolbar2,
2020
TimerBase, ToolContainerBase, cursors, _Mode)
2121
from matplotlib._pylab_helpers import Gcf
22-
from matplotlib.figure import Figure
23-
from matplotlib.widgets import SubplotTool
2422
from . import _tkagg
2523

2624

@@ -211,6 +209,8 @@ def filter_destroy(event):
211209

212210
self._tkcanvas.focus_set()
213211

212+
self._rubberband_rect = None
213+
214214
def _update_device_pixel_ratio(self, event=None):
215215
# Tk gives scaling with respect to 72 DPI, but most (all?) screens are
216216
# scaled vs 96 dpi, and pixel ratio settings are given in whole
@@ -609,16 +609,22 @@ def set_message(self, s):
609609
self.message.set(s)
610610

611611
def draw_rubberband(self, event, x0, y0, x1, y1):
612-
self.remove_rubberband()
612+
# Block copied from remove_rubberband for backend_tools convenience.
613+
if self.canvas._rubberband_rect:
614+
self.canvas._tkcanvas.delete(self.canvas._rubberband_rect)
613615
height = self.canvas.figure.bbox.height
614616
y0 = height - y0
615617
y1 = height - y1
616-
self.lastrect = self.canvas._tkcanvas.create_rectangle(x0, y0, x1, y1)
618+
self.canvas._rubberband_rect = self.canvas._tkcanvas.create_rectangle(
619+
x0, y0, x1, y1)
617620

618621
def remove_rubberband(self):
619-
if hasattr(self, "lastrect"):
620-
self.canvas._tkcanvas.delete(self.lastrect)
621-
del self.lastrect
622+
if self.canvas._rubberband_rect:
623+
self.canvas._tkcanvas.delete(self.canvas._rubberband_rect)
624+
self.canvas._rubberband_rect = None
625+
626+
lastrect = _api.deprecated("3.6")(
627+
property(lambda self: self.canvas._rubberband_rect))
622628

623629
def set_cursor(self, cursor):
624630
window = self.canvas.get_tk_widget().master
@@ -777,17 +783,15 @@ def hidetip(self):
777783
@backend_tools._register_tool_class(FigureCanvasTk)
778784
class RubberbandTk(backend_tools.RubberbandBase):
779785
def draw_rubberband(self, x0, y0, x1, y1):
780-
self.remove_rubberband()
781-
height = self.figure.canvas.figure.bbox.height
782-
y0 = height - y0
783-
y1 = height - y1
784-
self.lastrect = self.figure.canvas._tkcanvas.create_rectangle(
785-
x0, y0, x1, y1)
786+
NavigationToolbar2Tk.draw_rubberband(
787+
self._make_classic_style_pseudo_toolbar(), None, x0, y0, x1, y1)
786788

787789
def remove_rubberband(self):
788-
if hasattr(self, "lastrect"):
789-
self.figure.canvas._tkcanvas.delete(self.lastrect)
790-
del self.lastrect
790+
NavigationToolbar2Tk.remove_rubberband(
791+
self._make_classic_style_pseudo_toolbar())
792+
793+
lastrect = _api.deprecated("3.6")(
794+
property(lambda self: self.figure.canvas._rubberband_rect))
791795

792796

793797
@_api.deprecated("3.5", alternative="ToolSetCursor")
@@ -869,32 +873,9 @@ def trigger(self, *args):
869873

870874
@backend_tools._register_tool_class(FigureCanvasTk)
871875
class ConfigureSubplotsTk(backend_tools.ConfigureSubplotsBase):
872-
def __init__(self, *args, **kwargs):
873-
super().__init__(*args, **kwargs)
874-
self.window = None
875-
876876
def trigger(self, *args):
877-
self.init_window()
878-
self.window.lift()
879-
880-
def init_window(self):
881-
if self.window:
882-
return
883-
884-
toolfig = Figure(figsize=(6, 3))
885-
self.window = tk.Tk()
886-
887-
canvas = type(self.canvas)(toolfig, master=self.window)
888-
toolfig.subplots_adjust(top=0.9)
889-
SubplotTool(self.figure, toolfig)
890-
canvas.draw()
891-
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
892-
self.window.protocol("WM_DELETE_WINDOW", self.destroy)
893-
894-
def destroy(self, *args, **kwargs):
895-
if self.window is not None:
896-
self.window.destroy()
897-
self.window = None
877+
NavigationToolbar2Tk.configure_subplots(
878+
self._make_classic_style_pseudo_toolbar())
898879

899880

900881
@backend_tools._register_tool_class(FigureCanvasTk)

lib/matplotlib/backends/backend_gtk3.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -615,11 +615,8 @@ def set_message(self, s):
615615
@backend_tools._register_tool_class(FigureCanvasGTK3)
616616
class SaveFigureGTK3(backend_tools.SaveFigureBase):
617617
def trigger(self, *args, **kwargs):
618-
619-
class PseudoToolbar:
620-
canvas = self.figure.canvas
621-
622-
return NavigationToolbar2GTK3.save_figure(PseudoToolbar())
618+
NavigationToolbar2GTK3.save_figure(
619+
self._make_classic_style_pseudo_toolbar())
623620

624621

625622
@_api.deprecated("3.5", alternative="ToolSetCursor")

lib/matplotlib/backends/backend_gtk4.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -590,11 +590,8 @@ def set_message(self, s):
590590
@backend_tools._register_tool_class(FigureCanvasGTK4)
591591
class SaveFigureGTK4(backend_tools.SaveFigureBase):
592592
def trigger(self, *args, **kwargs):
593-
594-
class PseudoToolbar:
595-
canvas = self.figure.canvas
596-
597-
return NavigationToolbar2GTK4.save_figure(PseudoToolbar())
593+
NavigationToolbar2GTK4.save_figure(
594+
self._make_classic_style_pseudo_toolbar())
598595

599596

600597
@backend_tools._register_tool_class(FigureCanvasGTK4)

0 commit comments

Comments
 (0)