From f0923774e411ca2022e4fdc6fe8678c636f06908 Mon Sep 17 00:00:00 2001 From: Federico Ariza Date: Tue, 13 Feb 2018 13:28:08 -0500 Subject: [PATCH 01/10] GTK3 implementation of the copy canvas tool --- lib/matplotlib/backend_tools.py | 8 ++++++++ lib/matplotlib/backends/backend_gtk3.py | 10 ++++++++++ lib/matplotlib/rcsetup.py | 1 + 3 files changed, 19 insertions(+) diff --git a/lib/matplotlib/backend_tools.py b/lib/matplotlib/backend_tools.py index a884cc838860..866ccf6526f5 100644 --- a/lib/matplotlib/backend_tools.py +++ b/lib/matplotlib/backend_tools.py @@ -1063,6 +1063,13 @@ def _get_help_html(self): "".join(rows[1:]) + "") +class ToolCopyToClipboardBase(ToolBase): + """Tool to copy the figure to the clipboard""" + + description = 'Copy the canvas figure to clipboard' + default_keymap = rcParams['keymap.copy'] + + default_tools = {'home': ToolHome, 'back': ToolBack, 'forward': ToolForward, 'zoom': ToolZoom, 'pan': ToolPan, 'subplots': 'ToolConfigureSubplots', @@ -1081,6 +1088,7 @@ def _get_help_html(self): 'cursor': 'ToolSetCursor', 'rubberband': 'ToolRubberband', 'help': 'ToolHelp', + 'copy': 'ToolCopyToClipboard', } """Default tools""" diff --git a/lib/matplotlib/backends/backend_gtk3.py b/lib/matplotlib/backends/backend_gtk3.py index 5ed0a8db2d3d..2134bf75903d 100644 --- a/lib/matplotlib/backends/backend_gtk3.py +++ b/lib/matplotlib/backends/backend_gtk3.py @@ -856,6 +856,15 @@ def trigger(self, *args): dialog.destroy() +class ToolCopyToClipboardGTK3(backend_tools.ToolCopyToClipboardBase): + def trigger(self, *args, **kwargs): + clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) + window = self.canvas.get_window() + x, y, width, height = window.get_geometry() + pb = Gdk.pixbuf_get_from_window(window, x, y, width, height) + clipboard.set_image(pb) + + # Define the file to use as the GTk icon if sys.platform == 'win32': icon_filename = 'matplotlib.png' @@ -888,6 +897,7 @@ def error_msg_gtk(msg, parent=None): backend_tools.ToolSetCursor = SetCursorGTK3 backend_tools.ToolRubberband = RubberbandGTK3 backend_tools.ToolHelp = HelpGTK3 +backend_tools.ToolCopyToClipboard = ToolCopyToClipboardGTK3 Toolbar = ToolbarGTK3 diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index dcd2e6853b86..da9f8e1968c9 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -1421,6 +1421,7 @@ def _validate_linestyle(ls): 'keymap.xscale': [['k', 'L'], validate_stringlist], 'keymap.all_axes': [['a'], validate_stringlist], 'keymap.help': [['f1'], validate_stringlist], + 'keymap.copy': [('ctrl+c', 'cmd+c', 'shift+ctrl+c'), validate_stringlist], # sample data 'examples.directory': ['', validate_string], From 18df9222b9bc20aa2335c7b40efe13a06f00c8e6 Mon Sep 17 00:00:00 2001 From: Federico Ariza Date: Wed, 14 Feb 2018 12:57:25 -0500 Subject: [PATCH 02/10] QT copy to clipboard tool implementation --- lib/matplotlib/backends/backend_qt5.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/matplotlib/backends/backend_qt5.py b/lib/matplotlib/backends/backend_qt5.py index 5b94fd19d84b..a584f4e8de84 100644 --- a/lib/matplotlib/backends/backend_qt5.py +++ b/lib/matplotlib/backends/backend_qt5.py @@ -1069,11 +1069,18 @@ def trigger(self, *args): QtWidgets.QMessageBox.information(None, "Help", self._get_help_html()) +class ToolCopyToClipboardQT(backend_tools.ToolCopyToClipboardBase): + def trigger(self, *args, **kwargs): + pixmap = self.canvas.grab() + qApp.clipboard().setPixmap(pixmap) + + backend_tools.ToolSaveFigure = SaveFigureQt backend_tools.ToolConfigureSubplots = ConfigureSubplotsQt backend_tools.ToolSetCursor = SetCursorQt backend_tools.ToolRubberband = RubberbandQt backend_tools.ToolHelp = HelpQt +backend_tools.ToolCopyToClipboard = ToolCopyToClipboardQT def error_msg_qt(msg, parent=None): From 86d29682f79c94ec0bc6cadd9c9d414fc6fe4bf6 Mon Sep 17 00:00:00 2001 From: DietmarSchwertberger Date: Tue, 20 Mar 2018 22:55:07 +0100 Subject: [PATCH 03/10] Add first implementation of ToolCopyToClipboardWx --- lib/matplotlib/backends/backend_wx.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/matplotlib/backends/backend_wx.py b/lib/matplotlib/backends/backend_wx.py index dfbf23340492..709b9a7bf618 100644 --- a/lib/matplotlib/backends/backend_wx.py +++ b/lib/matplotlib/backends/backend_wx.py @@ -1826,9 +1826,22 @@ def remove_rubberband(self, dc=None): self._rect = None +class ToolCopyToClipboardWx(backend_tools.ToolCopyToClipboardBase): + def trigger(self, *args, **kwargs): + if not self.canvas._isDrawn: + self.canvas.draw() + if not self.canvas.bitmap.IsOk() or not wx.TheClipboard.Open(): + return + try: + wx.TheClipboard.SetData(wx.BitmapDataObject(self.canvas.bitmap)) + finally: + wx.TheClipboard.Close() + + backend_tools.ToolSaveFigure = SaveFigureWx backend_tools.ToolSetCursor = SetCursorWx backend_tools.ToolRubberband = RubberbandWx +backend_tools.ToolCopyToClipboard = ToolCopyToClipboardWx # < Additions for printing support: Matt Newville From 9923703e48e4bc94539877768a19aad5f83824d2 Mon Sep 17 00:00:00 2001 From: Federico Ariza Date: Thu, 12 Apr 2018 15:47:49 -0400 Subject: [PATCH 04/10] update rc template --- matplotlibrc.template | 1 + 1 file changed, 1 insertion(+) diff --git a/matplotlibrc.template b/matplotlibrc.template index a3416144f0f0..fcff5a5f27a1 100644 --- a/matplotlibrc.template +++ b/matplotlibrc.template @@ -591,6 +591,7 @@ backend : $TEMPLATE_BACKEND #keymap.yscale : l ## toggle scaling of y-axes ('log'/'linear') #keymap.xscale : k, L ## toggle scaling of x-axes ('log'/'linear') #keymap.all_axes : a ## enable all axes +#keymap.copy : ctrl+c, cmd+c, shift+ctrl+c ## Copy figure to clipboard ## Control location of examples data files #examples.directory : ## directory to look in for custom installation From 25aceeaea04e02962348ddb7a70600f57b4dd935 Mon Sep 17 00:00:00 2001 From: Federico Ariza Date: Wed, 18 Apr 2018 14:33:54 -0400 Subject: [PATCH 05/10] No copy tool for TK backend --- lib/matplotlib/backends/_backend_tk.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/matplotlib/backends/_backend_tk.py b/lib/matplotlib/backends/_backend_tk.py index 164077cdc713..c74d95593f46 100644 --- a/lib/matplotlib/backends/_backend_tk.py +++ b/lib/matplotlib/backends/_backend_tk.py @@ -971,11 +971,18 @@ def trigger(self, *args): dialog.done = lambda num: dialog.frame.master.withdraw() +class ToolCopyToClipboardTk(backend_tools.ToolCopyToClipboardBase): + def trigger(self, *args, **kwargs): + message = "Copy tool is not available for Tk backend" + self.toolmanager.message_event(message, self) + + backend_tools.ToolSaveFigure = SaveFigureTk backend_tools.ToolConfigureSubplots = ConfigureSubplotsTk backend_tools.ToolSetCursor = SetCursorTk backend_tools.ToolRubberband = RubberbandTk backend_tools.ToolHelp = HelpTk +backend_tools.ToolCopyToClipboard = ToolCopyToClipboardTk Toolbar = ToolbarTk From cff56e57b04730c2f17fa42c289e2cafaffea2c0 Mon Sep 17 00:00:00 2001 From: Federico Ariza Date: Wed, 18 Apr 2018 14:43:03 -0400 Subject: [PATCH 06/10] Base tool triggers message of not implemented --- lib/matplotlib/backend_tools.py | 4 ++++ lib/matplotlib/backends/_backend_tk.py | 4 +--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/backend_tools.py b/lib/matplotlib/backend_tools.py index 866ccf6526f5..803ce1c02c26 100644 --- a/lib/matplotlib/backend_tools.py +++ b/lib/matplotlib/backend_tools.py @@ -1069,6 +1069,10 @@ class ToolCopyToClipboardBase(ToolBase): description = 'Copy the canvas figure to clipboard' default_keymap = rcParams['keymap.copy'] + def trigger(self, *args, **kwargs): + message = "Copy tool is not available" + self.toolmanager.message_event(message, self) + default_tools = {'home': ToolHome, 'back': ToolBack, 'forward': ToolForward, 'zoom': ToolZoom, 'pan': ToolPan, diff --git a/lib/matplotlib/backends/_backend_tk.py b/lib/matplotlib/backends/_backend_tk.py index c74d95593f46..3c540b1b9aef 100644 --- a/lib/matplotlib/backends/_backend_tk.py +++ b/lib/matplotlib/backends/_backend_tk.py @@ -972,9 +972,7 @@ def trigger(self, *args): class ToolCopyToClipboardTk(backend_tools.ToolCopyToClipboardBase): - def trigger(self, *args, **kwargs): - message = "Copy tool is not available for Tk backend" - self.toolmanager.message_event(message, self) + pass backend_tools.ToolSaveFigure = SaveFigureTk From 2f131e1efc1e6893278838aa031b3d8dec13d059 Mon Sep 17 00:00:00 2001 From: Federico Ariza Date: Wed, 18 Apr 2018 14:49:59 -0400 Subject: [PATCH 07/10] removing unncesary class --- lib/matplotlib/backends/_backend_tk.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/matplotlib/backends/_backend_tk.py b/lib/matplotlib/backends/_backend_tk.py index 3c540b1b9aef..85d42eb437dc 100644 --- a/lib/matplotlib/backends/_backend_tk.py +++ b/lib/matplotlib/backends/_backend_tk.py @@ -971,16 +971,12 @@ def trigger(self, *args): dialog.done = lambda num: dialog.frame.master.withdraw() -class ToolCopyToClipboardTk(backend_tools.ToolCopyToClipboardBase): - pass - - backend_tools.ToolSaveFigure = SaveFigureTk backend_tools.ToolConfigureSubplots = ConfigureSubplotsTk backend_tools.ToolSetCursor = SetCursorTk backend_tools.ToolRubberband = RubberbandTk backend_tools.ToolHelp = HelpTk -backend_tools.ToolCopyToClipboard = ToolCopyToClipboardTk +backend_tools.ToolCopyToClipboard = backend_tools.ToolCopyToClipboardBase Toolbar = ToolbarTk From 584bf3e3cc838f6b16242da8826ef6b89d278cdb Mon Sep 17 00:00:00 2001 From: Federico Ariza Date: Wed, 18 Apr 2018 16:16:17 -0400 Subject: [PATCH 08/10] removing ctrl+shift+c from copy tool --- lib/matplotlib/rcsetup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index da9f8e1968c9..988dbfb45ba1 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -1421,7 +1421,7 @@ def _validate_linestyle(ls): 'keymap.xscale': [['k', 'L'], validate_stringlist], 'keymap.all_axes': [['a'], validate_stringlist], 'keymap.help': [['f1'], validate_stringlist], - 'keymap.copy': [('ctrl+c', 'cmd+c', 'shift+ctrl+c'), validate_stringlist], + 'keymap.copy': [('ctrl+c', 'cmd+c'), validate_stringlist], # sample data 'examples.directory': ['', validate_string], From e87cb47b4a1d68ba8f879a18ddea4fd0929e2dc0 Mon Sep 17 00:00:00 2001 From: Federico Ariza Date: Wed, 18 Apr 2018 16:21:21 -0400 Subject: [PATCH 09/10] copy tool keymap as list --- lib/matplotlib/rcsetup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 988dbfb45ba1..af812ebb08c7 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -1421,7 +1421,7 @@ def _validate_linestyle(ls): 'keymap.xscale': [['k', 'L'], validate_stringlist], 'keymap.all_axes': [['a'], validate_stringlist], 'keymap.help': [['f1'], validate_stringlist], - 'keymap.copy': [('ctrl+c', 'cmd+c'), validate_stringlist], + 'keymap.copy': [['ctrl+c', 'cmd+c'], validate_stringlist], # sample data 'examples.directory': ['', validate_string], From 3866f298f7b71e0796ad0826ea79b9e177b142e6 Mon Sep 17 00:00:00 2001 From: Federico Ariza Date: Wed, 18 Apr 2018 16:23:16 -0400 Subject: [PATCH 10/10] update rc.template --- matplotlibrc.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matplotlibrc.template b/matplotlibrc.template index fcff5a5f27a1..f4549755ed01 100644 --- a/matplotlibrc.template +++ b/matplotlibrc.template @@ -591,7 +591,7 @@ backend : $TEMPLATE_BACKEND #keymap.yscale : l ## toggle scaling of y-axes ('log'/'linear') #keymap.xscale : k, L ## toggle scaling of x-axes ('log'/'linear') #keymap.all_axes : a ## enable all axes -#keymap.copy : ctrl+c, cmd+c, shift+ctrl+c ## Copy figure to clipboard +#keymap.copy : ctrl+c, cmd+c ## Copy figure to clipboard ## Control location of examples data files #examples.directory : ## directory to look in for custom installation pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

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:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy