引言
图形与图像绘制支持是一个GUI框架库的核心模块之一,从Java的Graphics2D到Android的Canvas类支持到PyQT5中的QPainter类支持与图元支持,都很好的满足了GUI库的图形绘制与渲染需求。
QPainter类介绍
QPainter类是PyQT5中图形绘制类,支持圆、椭圆、矩形、圆角矩形、线段、文本、图像、多边形、弧形等常见几何形状的绘制与填充,支持颜色、旋转、状态复位、平移、错切等设置操作。所有的QWidget类都继承了paintEvent方法,绘制代码都应该在paintEvent方法中完成执行。一个典型的paintEvent方法绘制代码如下:
def paintEvent(self, paintEvent):
painter = QPainter(self)
painter.setPen(Qt.blue)
painter.setFont(QFont("Arial", 30))
painter.drawText(rect(), Qt.AlignCenter, "OpenCV学堂")
上述代码首先获取画笔,然后设置颜色与字体,最后绘制文本。通过用户创建Painter实例的方式绘制,绘制结束之后需要显式销毁,通过系统的painter绘制则无需这样,对比如下: 用户创建绘制
def paintEvent(self, paintEvent):
p = QPainter()
p.begin(self)
p.drawLine(...) # drawing code
p.end()
调用系统绘制
def paintEvent(self, paintEvent):
p = QPainter(self)
p.drawLine(...) # drawing code
所有绘制的函数支持都是draw开头,所有填充的函数都是fill开头,什么绘制与填充,请看下图:
综合代码演示
代码实现了绘制与填充不同的几何形状,支持不同颜色设置,线宽设置,风格设置等。运行结果如下图:

添加上显示图像功能之后如下:

相关自定义绘制类代码如下:
1fromPyQt5importQtWidgets
2fromPyQt5importQtGui
3fromPyQt5importQtCore
4importsys
5
6
7classMyCustomCanvas(QtWidgets.QWidget):
8def__init__(self):
9super().__init__()
10print("createmycustomcanvas")
11
12defpaintEvent(self,event):
13painter=QtGui.QPainter(self)
14#设置为反锯齿
15painter.setRenderHint(QtGui.QPainter.Antialiasing)
16
17#填充黑色背景
18painter.fillRect(self.rect(),QtCore.Qt.black)
19
20#绘制图像
21pic=QtGui.QPixmap("test3.png")
22painter.drawPixmap(self.rect(),pic)
23
24#设置字体与颜色,绘制文本
25pen=QtGui.QPen(QtCore.Qt.green,5,QtCore.Qt.DashLine)
26painter.setPen(pen)
27font=QtGui.QFont()
28font.setBold(True)
29font.setPointSizeF(24)
30painter.setFont(font)
31painter.drawText(QtCore.QPoint(20,50),"OpenCV学堂")
32
33#5表示线宽
34pen=QtGui.QPen(QtCore.Qt.red,5,QtCore.Qt.DashLine)
35painter.setPen(pen)
36painter.drawLine(50,100,50,400)
37
38#绘制矩形
39pen=QtGui.QPen(QtCore.Qt.yellow,5,QtCore.Qt.DotLine)
40painter.setPen(pen)
41painter.drawRect(QtCore.QRect(100,100,200,200))
42painter.fillRect(100,100,200,200,QtCore.Qt.green)
43
44#绘制圆
45pen=QtGui.QPen(QtCore.Qt.red,5,QtCore.Qt.DotLine)
46painter.setPen(pen)
47
48#设置为填充模式
49painter.setBrush(QtGui.QBrush(QtCore.Qt.yellow,QtCore.Qt.SolidPattern))
50
51#直接绘制
52painter.drawEllipse(QtCore.QRect(300,300,150,150))
53
54#贝塞尔曲线
55painter.setBrush(QtGui.QBrush(QtCore.Qt.red,QtCore.Qt.SolidPattern))
56self.drawBezierCurve(painter)
57
58defdrawBezierCurve(self,qp):
59path=QtGui.QPainterPath()
60path.moveTo(450,100)
61path.cubicTo(450,100,550,200,450,350)
62qp.drawPath(path)
审核编辑:刘清
-
JAVA
+关注
关注
19文章
2967浏览量
104738 -
GUI
+关注
关注
3文章
660浏览量
39668 -
pyqt5
+关注
关注
0文章
25浏览量
3400
原文标题:PyQT5开发之自定义QWegdit实现图形绘制
文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
可视可交互!H618上用OpenCV读取图像显示到PyQt5窗口上
在全志H616核桃派开发板上部署PyQt5的信号与槽详解
PyQt
【Firefly RK3399试用体验】第二篇:PyQt5大战点灯
【Firefly RK3399试用体验】PyQt5信号检测系统(结项)
利用PyQt5编辑软件界面的简单步骤
如何使用Python配合PyQT5模块来开发图形化应用程序
鲁班猫0 ubuntu20 解决python3.10安装pyqt5
Python PyQt5工具在Windows平台上的安装方法
PyQt5的中文教程电子书免费下载
OpenCV+PyQT5开发桌面应用几个重要的坑与解决
请问PyQT5是如何构建YOLOv8界面应用程序的
使用pycharm开发上位机配置pyqt5的环境
基于PyQT5与ONNXRUNTIME实现风格迁移应用

PyQT5中的QPainter类支持与图元支持实现图形绘制
评论