Tak, może. Pomysł polega na zastąpieniu domyślnego plt.figure
niestandardowym (technika znana jako monkey patching), które wstrzykuje obsługę klawiatury do kopiowania do schowka. Poniższy kod pozwala skopiować dowolny MPL rysunek do schowka, wciskając Ctrl + C:
import io
import matplotlib.pyplot as plt
from PySide.QtGui import QApplication, QImage
def add_clipboard_to_figures():
# use monkey-patching to replace the original plt.figure() function with
# our own, which supports clipboard-copying
oldfig = plt.figure
def newfig(*args, **kwargs):
fig = oldfig(*args, **kwargs)
def clipboard_handler(event):
if event.key == 'ctrl+c':
# store the image in a buffer using savefig(), this has the
# advantage of applying all the default savefig parameters
# such as background color; those would be ignored if you simply
# grab the canvas using Qt
buf = io.BytesIO()
fig.savefig(buf)
QApplication.clipboard().setImage(QImage.fromData(buf.getvalue()))
buf.close()
fig.canvas.mpl_connect('key_press_event', clipboard_handler)
return fig
plt.figure = newfig
add_clipboard_to_figures()
pamiętać, że jeśli chcesz używać from matplotlib.pyplot import *
(m.in. w sesji interaktywnej), trzeba zrobić po Wykonałeś powyższy kod, w przeciwnym razie importowany do domyślnej przestrzeni nazw będzie wersją nieprzylepioną.