目录
1、作用及应用步骤
2、绘制文本drawText()
3、像素级别绘制点(正弦曲线为例)
4、绘制不同样式的直线
5、绘制弧形、圆形、扇形、图像等
6、画刷填充区域QBrush
1、作用及应用步骤
QPainter是一个用于绘制的类,该类可以用于绘制:
文本
各种图形
图像
利用QPainter控件进行绘制得到的内容,在窗口尺寸发生改变的时候,会刷新,重新绘制,但是速度极快,以致于肉眼捕捉不到。
使用步骤一般为:
# 创建类
# 触发类开始
# 设置绘制区域、画笔颜色、笔触大小等参数
# 绘制结束
# 绘制方法,方法名称是固定的def paintEvent(self, event):# 在当前窗口创建绘制类painter = QPainter(self)# 开始绘制painter.begin(self)# 设置画笔颜色painter.setPen(QColor(100,100,100))# 设置绘制文本字体painter.setFont(QFont("simsun",25))# 设置绘制内容、绘制区域、对齐方式painter.drawText(event.rect(),Qt.AlignCenter,"利用QPainter绘制文本")# 结束绘制painter.end()
2、绘制文本drawText()
输入的是字符串文本
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2022/5/26 12:16
# @Author : @linlianqin
# @Site :
# @File : QPainter_learn.py
# @Software: PyCharm
# @description:from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5.QtGui import QPainter,QFont,QColor
from PyQt5.QtCore import Qt
import sys# 绘制文本
class drawText(QWidget):def __init__(self):super(drawText, self).__init__()self.setWindowTitle("利用QPainter绘制文本")# 绘制方法,方法名称是固定的def paintEvent(self, event):# 在当前窗口创建绘制类painter = QPainter(self)# 开始绘制painter.begin(self)# 设置画笔颜色painter.setPen(QColor(100,100,100))# 设置绘制文本字体painter.setFont(QFont("simsun",25))# 设置绘制内容、绘制区域、对齐方式painter.drawText(event.rect(),Qt.AlignCenter,"利用QPainter绘制文本")# 结束绘制painter.end()if __name__ == '__main__':app = QApplication(sys.argv)mainWin = drawText()mainWin.show()sys.exit(app.exec_())
上述可以看到,利用QPainter控件绘制的文件,会自适应窗口,一致保持居中的对齐方式。
3、像素级别绘制点(正弦曲线为例)
输入的是像素点坐标
painter.drawPoint(x,y)
# 绘制sin曲线
class drawSin(QWidget):def __init__(self):super(drawSin, self).__init__()self.setWindowTitle("利用QPainter绘制文本")# 绘制方法,方法名称是固定的def paintEvent(self, event):# 在当前窗口创建绘制类painter = QPainter(self)# 开始绘制painter.begin(self)# 设置画笔颜色painter.setPen(QColor(0,100,100))# 设置绘制内容、绘制区域、对齐方式## 窗口大小size = self.size()## 这里是逐点绘制for i in range(1000):x = 100*(-1+2*i/1000)+size.width()/2 ##加上窗口宽度的一半是为了将图像移动到屏幕中心y = -50*math.sin((x-size.width()/2)*math.pi/50)+size.height()/2.0painter.drawPoint(x,y)# 结束绘制painter.end()if __name__ == '__main__':app = QApplication(sys.argv)mainWin = drawSin()mainWin.show()sys.exit(app.exec_())
4、绘制不同样式的直线
输入的是四个数,分别是直线的起点坐标(x1,y1),直线的终点坐标(x2,y2)
# 绘制方法,方法名称是固定的def paintEvent(self, event):# 在当前窗口创建绘制类painter = QPainter(self)# 开始绘制painter.begin(self)## 实线pen = QPen(Qt.red,Qt.SolidLine)painter.setPen(pen)painter.drawLine(20,20,200,20)## 虚线pen.setStyle(Qt.DashLine)painter.setPen(pen)painter.drawLine(20,40,200,40)## 点划线pen.setStyle(Qt.DashDotLine)painter.setPen(pen)painter.drawLine(20,60,200,60)## 自定义pen.setStyle(Qt.CustomDashLine)pen.setDashPattern([1,4,5,4]) # 设置一段线的长度和间隔painter.setPen(pen)painter.drawLine(20, 80, 200, 80)# 结束绘制painter.end()
5、绘制弧形、圆形、扇形、图像等
输入绘制区域和相关的关键点坐标
from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5.QtGui import QPainter,QFont,QColor,QPen,QPolygon,QImage
from PyQt5.QtCore import Qt,QRect,QPoint## 绘制弧#### 规定绘制区域rect = QRect(0,10,100,100) ## 左上角点坐标,长宽值#### 画弧,输入绘制区域、起始弧度和终止弧度,其中一弧度等于1/16度painter.drawArc(rect,0,45*16)## 通过绘制弧来绘制圆#### 规定绘制区域rect = QRect(120,10,100,100) ## 左上角点坐标,长宽值#### 画弧,输入绘制区域、起始弧度和终止弧度,其中一弧度等于1/16度painter.setPen(Qt.red)painter.drawArc(rect,0,360*16)## 绘制带线的弧#### 规定绘制区域rect = QRect(0,120,100,100) ## 左上角点坐标,长宽值#### 画弧,输入绘制区域、起始弧度和终止弧度,其中一弧度等于1/16度painter.drawChord(rect,0,45*16)## 绘制椭圆painter.drawEllipse(120,120,150,100)## 绘制扇形painter.drawPie(240,10,100,100,12,130*16) ### 绘制区域、扇## 绘制多边形painter.drawPolygon(QPolygon([QPoint(240,20),QPoint(300,100),QPoint(300,120),QPoint(240,150),QPoint(200,100)]))## 绘制图像image = QImage("1.jpg")painter.drawImage(QRect(10,250,image.width()/3,image.height()/3),image)
6、画刷填充区域QBrush
# 利用画刷填充区域
class QBrushDemo(QWidget):def __init__(self):super(QBrushDemo, self).__init__()self.setWindowTitle("利用画刷填充区域")# 绘制方法,方法名称是固定的def paintEvent(self, event):# 在当前窗口创建绘制类painter = QPainter(self)# 开始绘制painter.begin(self)brush = QBrush(Qt.Dense1Pattern)painter.setBrush(brush)painter.drawRect(10,10,100,100)brush = QBrush(Qt.Dense2Pattern)painter.setBrush(brush)painter.drawRect(10,120,100,100)brush = QBrush(Qt.Dense3Pattern)painter.setBrush(brush)painter.drawRect(120,10,100,100)brush = QBrush(Qt.SolidPattern)painter.setBrush(brush)painter.drawRect(120,120,100,100)painter.end()if __name__ == '__main__':app = QApplication(sys.argv)mainWin = QBrushDemo()mainWin.show()sys.exit(app.exec_())