【发布时间】:2018-05-07 02:10:25
【问题描述】:
在 pyQt 应用程序中,我将 matplotlib 图形 (self.canvas) 复制到使用任一方法的 QClipboard 实例中
cb = QClipboard(self)
img = QImage(self.canvas.grab())
cb.setImage(img)
或
img = QPixmap(self.canvas.grab())
self.cb.setPixmap(img)
两者都运行良好,但是我无法控制导出图像的分辨率。这可以通过创建和导出一个临时文件来实现,但是,由于文件系统的限制,这很慢并且有潜在的问题:
self.canvas.figure.savefig(self.temp_file, dpi = 300, type = 'png')
temp_img = QImage(self.temp_file)
cb.setImage(temp_img)
那么,有没有办法在不绕道文件系统的情况下设置复制图像的分辨率?
--------------------------
编辑:我刚刚发现上面在pyqt4下不起作用。相反,您可以使用
img = QPixmap.grabWidget(self.canvas)
self.cb.setPixmap(img)
--------------------------
编辑:另一个几乎可行的解决方案是以下代码,不幸的是它改变了颜色(回到 matplotlib 默认值?):
# construct image from raw rgba data, this changes the colormap:
size = self.canvas.size()
width, height = size.width(), size.height()
im = QImage(self.canvas.buffer_rgba(), width, height, QImage.Format_ARGB32)
self.cb.setImage(im)
【问题讨论】:
标签: python matplotlib pyqt clipboard dpi