|
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