📅  最后修改于: 2023-12-03 14:46:09.919000             🧑  作者: Mango
在 Pyqt5 中,可以使用 QPainter 画布来绘制各种形状、图像等。在绘制完成后,还可以将画布保存为图片或 PDF,可以将图片保存为 PNG,JPEG 等格式。
在本文中,我们将介绍如何在 PyQt5 中保存画布。我们将使用 QPixmap 对象来保存画布,以及 QFileDialog 对话框来选择保存位置。
在开始之前,先导入必要的模块:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
下一步是创建一个主窗口。在这个例子中,我们使用 QLabel,作为容器来显示画布。
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Save Canvas As Image")
self.setGeometry(100, 100, 800, 600)
# 创建 QLabel
self.label = QLabel(self)
self.label.setGeometry(10, 10, 780, 580)
接下来,我们定义一个函数来绘制画布。在这个例子中,我们将绘制一个文本标签,一个矩形和一个椭圆。
def draw_canvas(self):
# 创建 QPixmap 对象
pixmap = QPixmap(780, 580)
pixmap.fill(Qt.white)
# 使用 QPainter 对象绘制图形
painter = QPainter(pixmap)
painter.setPen(QPen(Qt.black, 2))
# 绘制文本
painter.drawText(100, 100, "Hello World")
# 绘制矩形
painter.drawRect(200, 200, 300, 200)
# 绘制椭圆
painter.drawEllipse(400, 100, 300, 200)
painter.end()
# 将 QPixmap 对象显示在 QLabel 中
self.label.setPixmap(pixmap)
最后,我们定义一个函数来保存画布。当用户单击“保存”按钮时,将出现一个文件对话框。用户可以选择文件名和保存文件的位置。然后,将 QPixmap 对象保存为 PNG 文件。
def save_canvas(self):
# 显示一个文件对话框,以选择保存的文件名和位置
fileName, _ = QFileDialog.getSaveFileName(self, "Save Image", "", "PNG (*.png);;JPEG (*.jpg *.jpeg)")
# 如果用户单击了 OK 按钮
if fileName != '':
# 从 QLabel 获取 QPixmap 对象
pixmap = self.label.pixmap()
# 将 QPixmap 对象保存为 PNG 文件
pixmap.save(fileName)
将绘制画布和保存画布的函数添加到应用程序中,并运行应用程序。
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Save Canvas As Image")
self.setGeometry(100, 100, 800, 600)
# 创建 QLabel
self.label = QLabel(self)
self.label.setGeometry(10, 10, 780, 580)
# 创建绘制画布按钮
self.drawBtn = QPushButton("Draw Canvas", self)
self.drawBtn.move(20, 20)
self.drawBtn.clicked.connect(self.draw_canvas)
# 创建保存画布按钮
self.saveBtn = QPushButton("Save Canvas", self)
self.saveBtn.move(20, 50)
self.saveBtn.clicked.connect(self.save_canvas)
def draw_canvas(self):
# 创建 QPixmap 对象
pixmap = QPixmap(780, 580)
pixmap.fill(Qt.white)
# 使用 QPainter 对象绘制图形
painter = QPainter(pixmap)
painter.setPen(QPen(Qt.black, 2))
# 绘制文本
painter.drawText(100, 100, "Hello World")
# 绘制矩形
painter.drawRect(200, 200, 300, 200)
# 绘制椭圆
painter.drawEllipse(400, 100, 300, 200)
painter.end()
# 将 QPixmap 对象显示在 QLabel 中
self.label.setPixmap(pixmap)
def save_canvas(self):
# 显示一个文件对话框,以选择保存的文件名和位置
fileName, _ = QFileDialog.getSaveFileName(self, "Save Image", "", "PNG (*.png);;JPEG (*.jpg *.jpeg)")
# 如果用户单击了 OK 按钮
if fileName != '':
# 从 QLabel 获取 QPixmap 对象
pixmap = self.label.pixmap()
# 将 QPixmap 对象保存为 PNG 文件
pixmap.save(fileName)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
现在,通过运行应用程序并单击“绘制画布”按钮,可以绘制画布。当单击“保存画布”按钮时,将出现文件对话框,用户可以选择保存位置和文件名。在选择保存位置和文件名后,将保存绘制的画布。