Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-matplotlib-PyQT:将图像复制到剪贴板_Python_Matplotlib_Pyqt - Fatal编程技术网

Python-matplotlib-PyQT:将图像复制到剪贴板

Python-matplotlib-PyQT:将图像复制到剪贴板,python,matplotlib,pyqt,Python,Matplotlib,Pyqt,我想将matplotlib的当前图形复制到剪贴板: 这段代码不起作用(出于测试目的,我想稍后将位图保存到磁盘,我将使用它作为位图图像。我想从拥有一个内存位图开始,我可以使用QT的QImage、QPixmap、QBitmap或其他一些QT类) 有什么解决办法吗 您没有创建有效的图像 im = QImage(self.canvas.buffer_rgba()) 实际上忽略了你传递的论点canvas.buffer_rgba()返回一个memoryview,其中任何一个都无法处理: QImage()

我想将matplotlib的当前图形复制到剪贴板:

这段代码不起作用(出于测试目的,我想稍后将位图保存到磁盘,我将使用它作为位图图像。我想从拥有一个内存位图开始,我可以使用QT的QImage、QPixmap、QBitmap或其他一些QT类)


有什么解决办法吗

您没有创建有效的图像

im = QImage(self.canvas.buffer_rgba())
实际上忽略了你传递的论点
canvas.buffer_rgba()
返回一个memoryview,其中任何一个都无法处理:

QImage()
QImage(QSize, QImage.Format)
QImage(int, int, QImage.Format)
QImage(str, int, int, QImage.Format)
QImage(sip.voidptr, int, int, QImage.Format)
QImage(str, int, int, int, QImage.Format)
QImage(sip.voidptr, int, int, int, QImage.Format)
QImage(list-of-str)
QImage(QString, str format=None)
QImage(QImage)
QImage(QVariant)
在python中实际上只有一个
\uuuu init\uuu
方法,因此类型检查必须通过内部检查来完成
QImage(QVariant)
基本上与
QImage(object)
相同(事实上,在python3中,它就是这样),因此它基本上允许您传递任何对象,如果无法在内部将其转换为
QVariant
,则忽略它,因此返回的QImage将为空

如果要从原始rgba数据构建图像,则需要指定图像的大小,因为无法从原始数据以及格式获取此信息。这应该起作用:

size = self.canvas.size()
width, height = size.width(), size.height()
im = QImage(self.canvas.buffer_rgba(), width, height, QImage.Format_ARGB32)
im.save('test.png')
另一种方法是直接将画布作为pixmap抓取:

pixmap = QPixmap.grabWidget(self.canvas)
pixmap.save('test.png')
保存到剪贴板:

QApplication.clipboard().setPixmap(pixmap)

哦,你不应该使用
gif
,而应该使用
png
。由于其专有性质,
gif
通常不作为支持的输出格式提供。选中
QImageWriter.supportedImageFormats()

在交互式Python shell中工作时,可以使用如下函数

def to_clipboard(fig):
  QApplication.clipboard().setImage(QPixmap.grabWidget(fig.canvas).toImage())
  print('figure %d copied to clipboard' % fig.number)

然后像使用剪贴板(gcf())一样使用它来存储当前图形。

除了@mata answer,对于更新,由于QPixmap.grabWidget现在已经过时,我们可以使用:

pixmap = self.canvas.grab()
QApplication.clipboard().setPixmap(pixmap)

谢谢,它很管用!现在唯一困扰我的是,图形颜色在保存的图像文件中被更改回默认颜色,而在屏幕上则根据需要进行更改。
pixmap = self.canvas.grab()
QApplication.clipboard().setPixmap(pixmap)