|
19 | 19 | _Backend, FigureCanvasBase, FigureManagerBase, NavigationToolbar2,
|
20 | 20 | TimerBase, ToolContainerBase, cursors, _Mode)
|
21 | 21 | from matplotlib._pylab_helpers import Gcf
|
22 |
| -from matplotlib.figure import Figure |
23 |
| -from matplotlib.widgets import SubplotTool |
24 | 22 | from . import _tkagg
|
25 | 23 |
|
26 | 24 |
|
@@ -211,6 +209,8 @@ def filter_destroy(event):
|
211 | 209 |
|
212 | 210 | self._tkcanvas.focus_set()
|
213 | 211 |
|
| 212 | + self._rubberband_rect = None |
| 213 | + |
214 | 214 | def _update_device_pixel_ratio(self, event=None):
|
215 | 215 | # Tk gives scaling with respect to 72 DPI, but most (all?) screens are
|
216 | 216 | # scaled vs 96 dpi, and pixel ratio settings are given in whole
|
@@ -609,16 +609,22 @@ def set_message(self, s):
|
609 | 609 | self.message.set(s)
|
610 | 610 |
|
611 | 611 | 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) |
613 | 615 | height = self.canvas.figure.bbox.height
|
614 | 616 | y0 = height - y0
|
615 | 617 | 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) |
617 | 620 |
|
618 | 621 | 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)) |
622 | 628 |
|
623 | 629 | def set_cursor(self, cursor):
|
624 | 630 | window = self.canvas.get_tk_widget().master
|
@@ -777,17 +783,15 @@ def hidetip(self):
|
777 | 783 | @backend_tools._register_tool_class(FigureCanvasTk)
|
778 | 784 | class RubberbandTk(backend_tools.RubberbandBase):
|
779 | 785 | 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) |
786 | 788 |
|
787 | 789 | 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)) |
791 | 795 |
|
792 | 796 |
|
793 | 797 | @_api.deprecated("3.5", alternative="ToolSetCursor")
|
@@ -869,32 +873,9 @@ def trigger(self, *args):
|
869 | 873 |
|
870 | 874 | @backend_tools._register_tool_class(FigureCanvasTk)
|
871 | 875 | class ConfigureSubplotsTk(backend_tools.ConfigureSubplotsBase):
|
872 |
| - def __init__(self, *args, **kwargs): |
873 |
| - super().__init__(*args, **kwargs) |
874 |
| - self.window = None |
875 |
| - |
876 | 876 | 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()) |
898 | 879 |
|
899 | 880 |
|
900 | 881 | @backend_tools._register_tool_class(FigureCanvasTk)
|
|
0 commit comments