当前位置:首页>python>用 Python Qt5 的 QPainter 实现 2D 图形绘制

用 Python Qt5 的 QPainter 实现 2D 图形绘制

  • 2026-08-25 11:56:44
用 Python Qt5 的 QPainter 实现 2D 图形绘制

使用 Python Qt5 的 QPainter 实现 2D 图形绘制,包括基础图形(直线、矩形、圆形)、填充效果、文字绘制等核心功能,并提供一个完整可运行的示例程序。

核心实现思路

  1. 继承 QWidget 自定义绘图控件,重写 paintEvent 方法(Qt 的绘图入口)
  2. 在 paintEvent 中创建 QPainter 对象,设置画笔(QPen)、画刷(QBrush)等样式
  3. 使用 QPainter 的绘图方法绘制各类 2D 图形
  4. 将自定义控件嵌入主窗口,运行程序

完整示例代码

import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QMainWindowfrom PyQt5.QtGui import QPainter, QPen, QBrush, QColor, QFontfrom PyQt5.QtCore import Qt, QPointclassDrawWidget(QWidget):"""自定义绘图控件,所有2D图形都在这里绘制"""defpaintEvent(self, event):# 1. 创建QPainter对象,指定绘制设备为当前控件        painter = QPainter(self)# 开启抗锯齿,让图形边缘更平滑        painter.setRenderHint(QPainter.Antialiasing)# ---------------------- 1. 绘制基础线条 ----------------------# 设置画笔:红色、宽度3、实线样式        pen = QPen(QColor(255, 0, 0), 3, Qt.SolidLine)        painter.setPen(pen)# 绘制直线:从(50, 50)到(200, 50)        painter.drawLine(50, 50, 200, 50)# 绘制虚线        pen.setStyle(Qt.DashLine)        pen.setColor(QColor(0, 0, 255))  # 蓝色        painter.setPen(pen)        painter.drawLine(50, 80, 200, 80)# ---------------------- 2. 绘制几何图形 ----------------------# 绘制矩形(无填充)        pen.setStyle(Qt.SolidLine)        pen.setColor(QColor(0, 255, 0))  # 绿色        painter.setPen(pen)        painter.drawRect(50, 110, 150, 80)  # x, y, width, height# 绘制填充矩形        brush = QBrush(QColor(255, 255, 0, 100))  # 黄色,透明度100        painter.setBrush(brush)        painter.drawRect(220, 110, 150, 80)# 绘制圆形(椭圆的特殊形式:宽高相等)        pen.setColor(QColor(128, 0, 128))  # 紫色        painter.setPen(pen)        painter.setBrush(QBrush(Qt.CrossPattern))  # 交叉填充样式        painter.drawEllipse(50, 220, 100, 100)  # x, y, width, height# 绘制椭圆        painter.setBrush(QBrush(QColor(255, 165, 0)))  # 橙色实心        painter.drawEllipse(180, 220, 120, 80)# ---------------------- 3. 绘制多边形 ----------------------# 定义多边形顶点        points = [            QPoint(50, 350),            QPoint(120, 320),            QPoint(180, 350),            QPoint(150, 420),            QPoint(80, 400)        ]        pen.setColor(QColor(0, 128, 128))  # 青绿色        painter.setPen(pen)        painter.setBrush(QBrush(QColor(0, 128, 128, 80)))  # 半透明青绿色        painter.drawPolygon(points)# ---------------------- 4. 绘制文字 ----------------------# 设置字体        font = QFont("微软雅黑", 14, QFont.Bold)        painter.setFont(font)        painter.setPen(QColor(0, 0, 0))  # 黑色文字        painter.drawText(50, 480, "Qt5 QPainter 2D图形绘制示例")classMainWindow(QMainWindow):"""主窗口"""def__init__(self):        super().__init__()# 设置窗口属性        self.setWindowTitle("Qt5 2D图形绘制")        self.setGeometry(100, 100, 800, 600)  # x, y, width, height# 创建自定义绘图控件并设为中心窗口        self.draw_widget = DrawWidget()        self.setCentralWidget(self.draw_widget)if __name__ == "__main__":# 初始化Qt应用    app = QApplication(sys.argv)# 创建并显示主窗口    window = MainWindow()    window.show()# 运行应用事件循环    sys.exit(app.exec_())

代码关键部分解释

  1. 自定义绘图控件 DrawWidget

    • 重写 paintEvent 方法:这是 Qt 绘图的核心入口,当控件需要重绘(如窗口刷新、大小变化)时会自动调用
    • painter.setRenderHint(QPainter.Antialiasing):开启抗锯齿,避免图形边缘出现锯齿状,提升视觉效果
  2. 画笔(QPen)与画刷(QBrush)

    • QPen:控制图形的轮廓样式(颜色、宽度、线条样式:实线/虚线等)
    • QBrush:控制图形的填充效果(纯色、渐变、图案填充等)
  3. 核心绘图方法

    • drawLine(x1, y1, x2, y2):绘制直线
    • drawRect(x, y, w, h):绘制矩形
    • drawEllipse(x, y, w, h):绘制椭圆(w=h 时为圆形)
    • drawPolygon(points):绘制多边形
    • drawText(x, y, text):绘制文字
  4. 坐标系统

    • Qt 绘图的坐标原点在控件左上角,x 轴向右,y 轴向下
    • 所有绘图方法的坐标参数均基于此坐标系

运行前置条件

  1. 安装 PyQt5:
pip install PyQt5
  1. 运行代码:直接执行脚本,会弹出一个窗口,显示各类绘制的2D图形

总结

  1. Qt5 中使用 QPainter 绘制2D图形的核心是重写控件的 paintEvent 方法,在其中创建 QPainter 对象并调用绘图方法。
  2. QPen 控制图形轮廓样式,QBrush 控制填充效果,两者配合可实现丰富的视觉效果。
  3. 常用绘图方法包括 drawLine、drawRect、drawEllipse、drawPolygon、drawText 等,覆盖大部分2D图形绘制需求。

最新文章

随机文章