diff --git a/lib/matplotlib/backends/_backend_tk.py b/lib/matplotlib/backends/_backend_tk.py index 5d92e35469c2..7617d76e2591 100644 --- a/lib/matplotlib/backends/_backend_tk.py +++ b/lib/matplotlib/backends/_backend_tk.py @@ -212,7 +212,8 @@ def filter_destroy(event): self._tkcanvas.focus_set() - self._rubberband_rect = None + self._rubberband_rect_black = None + self._rubberband_rect_white = None def _update_device_pixel_ratio(self, event=None): # Tk gives scaling with respect to 72 DPI, but Windows screens are @@ -667,21 +668,30 @@ def set_message(self, s): def draw_rubberband(self, event, x0, y0, x1, y1): # Block copied from remove_rubberband for backend_tools convenience. - if self.canvas._rubberband_rect: - self.canvas._tkcanvas.delete(self.canvas._rubberband_rect) + if self.canvas._rubberband_rect_white: + self.canvas._tkcanvas.delete(self.canvas._rubberband_rect_white) + if self.canvas._rubberband_rect_black: + self.canvas._tkcanvas.delete(self.canvas._rubberband_rect_black) height = self.canvas.figure.bbox.height y0 = height - y0 y1 = height - y1 - self.canvas._rubberband_rect = self.canvas._tkcanvas.create_rectangle( - x0, y0, x1, y1) + self.canvas._rubberband_rect_black = ( + self.canvas._tkcanvas.create_rectangle( + x0, y0, x1, y1)) + self.canvas._rubberband_rect_white = ( + self.canvas._tkcanvas.create_rectangle( + x0, y0, x1, y1, outline='white', dash=(3, 3))) def remove_rubberband(self): - if self.canvas._rubberband_rect: - self.canvas._tkcanvas.delete(self.canvas._rubberband_rect) - self.canvas._rubberband_rect = None + if self.canvas._rubberband_rect_white: + self.canvas._tkcanvas.delete(self.canvas._rubberband_rect_white) + self.canvas._rubberband_rect_white = None + if self.canvas._rubberband_rect_black: + self.canvas._tkcanvas.delete(self.canvas._rubberband_rect_black) + self.canvas._rubberband_rect_black = None lastrect = _api.deprecated("3.6")( - property(lambda self: self.canvas._rubberband_rect)) + property(lambda self: self.canvas._rubberband_rect_black)) def _set_image_for_button(self, button): """ @@ -907,7 +917,7 @@ def remove_rubberband(self): self._make_classic_style_pseudo_toolbar()) lastrect = _api.deprecated("3.6")( - property(lambda self: self.figure.canvas._rubberband_rect)) + property(lambda self: self.figure.canvas._rubberband_rect_black)) @_api.deprecated("3.5", alternative="ToolSetCursor") diff --git a/lib/matplotlib/backends/backend_wx.py b/lib/matplotlib/backends/backend_wx.py index 952dd27a3903..4d88547b865d 100644 --- a/lib/matplotlib/backends/backend_wx.py +++ b/lib/matplotlib/backends/backend_wx.py @@ -508,6 +508,8 @@ def __init__(self, parent, id, figure=None): _log.debug("%s - __init__() - bitmap w:%d h:%d", type(self), w, h) self._isDrawn = False self._rubberband_rect = None + self._rubberband_pen_black = wx.Pen('BLACK', 1, wx.PENSTYLE_SHORT_DASH) + self._rubberband_pen_white = wx.Pen('WHITE', 1, wx.PENSTYLE_SOLID) self.Bind(wx.EVT_SIZE, self._on_size) self.Bind(wx.EVT_PAINT, self._on_paint) @@ -625,11 +627,11 @@ def gui_repaint(self, drawDC=None): drawDC.DrawBitmap(bmp, 0, 0) if self._rubberband_rect is not None: # Some versions of wx+python don't support numpy.float64 here. - x0, y0, x1, y1 = map(int, self._rubberband_rect) - drawDC.DrawLineList( - [(x0, y0, x1, y0), (x1, y0, x1, y1), - (x0, y0, x0, y1), (x0, y1, x1, y1)], - wx.Pen('BLACK', 1, wx.PENSTYLE_SHORT_DASH)) + x0, y0, x1, y1 = map(round, self._rubberband_rect) + rect = [(x0, y0, x1, y0), (x1, y0, x1, y1), + (x0, y0, x0, y1), (x0, y1, x1, y1)] + drawDC.DrawLineList(rect, self._rubberband_pen_white) + drawDC.DrawLineList(rect, self._rubberband_pen_black) filetypes = { **FigureCanvasBase.filetypes,
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: