欢迎访问宙启技术站
智能推送

使用QColor()在PyQt中创建一个简单的画图应用程序

发布时间:2023-12-28 04:18:41

在PyQt中使用QColor()来创建一个简单的画图应用程序,可以实现以下功能:选择不同的颜色,绘制自由曲线,绘制直线,绘制矩形,绘制圆形。

首先,我们需要导入必要的库:

from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton, QColorDialog
from PyQt5.QtGui import QPainter, QPen, QColor, QMouseEvent
from PyQt5.QtCore import Qt, QPoint, QRect

然后,我们创建一个自定义的窗口类,继承自QMainWindow:

class DrawWidget(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.shapes = []  # 用于保存绘制的形状
        self.current_shape = ""  # 当前要绘制的形状
        self.current_color = Qt.black  # 当前的颜色
        self.start_point = QPoint()  # 起点坐标
        self.end_point = QPoint()  # 终点坐标

    def paintEvent(self, event):
        painter = QPainter(self)
        pen = QPen()
        pen.setWidth(2)
        pen.setColor(self.current_color)
        painter.setPen(pen)

        for shape in self.shapes:
            painter.setBrush(shape[0])
            if shape[1] == "line":
                painter.drawLine(shape[2], shape[3])
            elif shape[1] == "rectangle":
                painter.drawRect(shape[2])
            elif shape[1] == "ellipse":
                painter.drawEllipse(shape[2])

        if self.current_shape == "line":
            painter.drawLine(self.start_point, self.end_point)
        elif self.current_shape == "rectangle":
            painter.drawRect(QRect(self.start_point, self.end_point))
        elif self.current_shape == "ellipse":
            painter.drawEllipse(
                QRect(self.start_point, self.end_point))

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.start_point = event.pos()

    def mouseMoveEvent(self, event):
        if event.buttons() & Qt.LeftButton:
            self.end_point = event.pos()
            self.update()

    def mouseReleaseEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.end_point = event.pos()
            self.saveShape()
            self.update()

    def saveShape(self):
        if self.current_shape == "line":
            self.shapes.append((self.current_color, "line", self.start_point, self.end_point))
        elif self.current_shape == "rectangle":
            self.shapes.append((self.current_color, "rectangle", QRect(self.start_point, self.end_point)))
        elif self.current_shape == "ellipse":
            self.shapes.append((self.current_color, "ellipse", QRect(self.start_point, self.end_point)))

    def setShape(self, shape):
        self.current_shape = shape

    def setColor(self, color):
        self.current_color = color

接下来,我们创建一个主窗口类,继承自QMainWindow,并在窗口中添加一个画布和一些按钮控制:

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle("Simple Paint")
        self.setFixedSize(800, 600)

        self.canvas = DrawWidget()
        layout = QVBoxLayout()
        layout.addWidget(self.canvas)

        button_line = QPushButton("Line")
        button_line.clicked.connect(lambda: self.canvas.setShape("line"))
        layout.addWidget(button_line)

        button_rectangle = QPushButton("Rectangle")
        button_rectangle.clicked.connect(
            lambda: self.canvas.setShape("rectangle"))
        layout.addWidget(button_rectangle)

        button_ellipse = QPushButton("Ellipse")
        button_ellipse.clicked.connect(lambda: self.canvas.setShape("ellipse"))
        layout.addWidget(button_ellipse)

        button_color = QPushButton("Color")
        button_color.clicked.connect(self.openColorDialog)
        layout.addWidget(button_color)

        central_widget = QWidget(self)
        central_widget.setLayout(layout)
        self.setCentralWidget(central_widget)

    def openColorDialog(self):
        color = QColorDialog.getColor()
        if color.isValid():
            self.canvas.setColor(color)

最后,我们创建一个应用程序实例,并运行:

if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

在这个简单的画图应用程序中,我们使用了QColor()来创建颜色对话框,使用户能够选择不同的颜色。通过点击不同的形状按钮,用户可以选择要绘制的形状。通过鼠标移动,用户可以自由绘制曲线。通过鼠标点击和释放,用户可以绘制直线、矩形和圆形。每个形状都使用QPainter进行绘制,并在画布上显示出来。