📜  Python – 如何在 pyqt5 中保存画布?(1)

📅  最后修改于: 2023-12-03 14:46:09.919000             🧑  作者: Mango

Python - 如何在 PyQt5 中保存画布?

在 Pyqt5 中,可以使用 QPainter 画布来绘制各种形状、图像等。在绘制完成后,还可以将画布保存为图片或 PDF,可以将图片保存为 PNG,JPEG 等格式。

在本文中,我们将介绍如何在 PyQt5 中保存画布。我们将使用 QPixmap 对象来保存画布,以及 QFileDialog 对话框来选择保存位置。

步骤 1: 导入模块

在开始之前,先导入必要的模块:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
步骤 2: 创建主窗口

下一步是创建一个主窗口。在这个例子中,我们使用 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)
步骤 3: 绘制画布

接下来,我们定义一个函数来绘制画布。在这个例子中,我们将绘制一个文本标签,一个矩形和一个椭圆。

    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)
步骤 4: 保存画布

最后,我们定义一个函数来保存画布。当用户单击“保存”按钮时,将出现一个文件对话框。用户可以选择文件名和保存文件的位置。然后,将 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)
步骤 5: 调用函数并运行应用程序

将绘制画布和保存画布的函数添加到应用程序中,并运行应用程序。

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_())

现在,通过运行应用程序并单击“绘制画布”按钮,可以绘制画布。当单击“保存画布”按钮时,将出现文件对话框,用户可以选择保存位置和文件名。在选择保存位置和文件名后,将保存绘制的画布。