使用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进行绘制,并在画布上显示出来。
