QPainter简介
在PyQt5中,一般可以通过Qpainter,QPen,QBrush这三个类来实现绘图功能,此外,QPixmap的作用是加载并呈现本地图像,而图像的本质上也是通过绘图方式实现的,所以QPixmap也可以被视为绘图的一个类
Qpainter类在QWidget(控件)上执性绘图操作,它是一个绘制工具,为大部分图形化界面提供了高度优化的函数,使QPainter类可以绘制从简单的直线到复杂的饼图等
核心重点:绘制操作在QWidget.paintEvent()中完成,绘制方法必须放在QtGui.QPainter对象的begin()和end()之间。QPainter类在控件或其他绘图设备上执行较低级别的图像绘制功能,并通过如表的方法进行绘制
QPainter绘制常用方法
方法 | 描述 |
begin() | 开始在目标设备上绘制 |
drawArc() | 在起始角度和最终角度之间画弧 |
drawEllipse() | 在一个矩形内画一个椭圆 |
drawLine(int x1,int y1,int x2,int y2) | 绘制一条指定了端点坐标的线,绘制从(x1,y1)到(x2,y2)的直线并且设置当前地画笔位置为(x2,y2) |
drawPixmap() | 从图像中提取Pixmap并将显示在指定位置 |
drawPolygon() | 使用坐标数组绘制多边形 |
drawRect(int x,int y,int w,int h) | 以给定的宽度w和高度h从左上角坐标(x,y)绘制一个矩形 |
drawText() | 显示给定坐标处的文字 |
fillRect() | 使用QColor参数填充矩形 |
setBrush() | 设置画笔的风格 |
setPen() | 设置用于绘制的笔的颜色,大小,样式 |
画笔风格(Penstyle)
枚举值 | 枚举值说明 |
Qt.Nopen | 没有线。比如QPainter.drawRect()填充,但没有绘制任何边界线 |
Qt.SolidLine | 一条简单的线 |
Qt.DashLine | 有一些像素分割的线 |
Qt.DotLine | 有一些像素分割的点 |
Qt.DashDotLine | 轮流交替的点和短线 |
Qt.DashDotDotLine | 一条短线,两个点 |
Qt.MpenStyle | 画笔风格的掩码 |
实例一:绘制文字
import sys
from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5.QtGui import QPainter,QColor,QFont
from PyQt5.QtCore import Qt
class Drawing(QWidget):
def __init__(self,parent=None):
super(Drawing, self).__init__(parent)
self.setWindowTitle('在窗口绘制文字')
self.resize(300,200)
self.text='欢迎学习 PyQt5'
def paintEvent(self,event):
painter=QPainter()
painter.begin(self)
#自定义绘制方法
self.drawText(event,painter)
painter.end()
def drawText(self,event,qp):
#设置画笔的颜色
qp.setPen(QColor(168,34,3))
#设置字体
qp.setFont(QFont('SimSun',20))
#绘制文字
qp.drawText(event.rect(),Qt.AlignCenter,self.text)
if __name__ == '__main__':
app=QApplication(sys.argv)
demo=Drawing()
demo.show()
sys.exit(app.exec_())
效果截图:
实例二:绘制点
import sys,math
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class Drawing(QWidget):
def __init__(self,parent=None):
super(Drawing,self).__init__(parent)
self.resize(300,200)
self.setWindowTitle('在窗口画点')
def paintEvent(self,event):
#初始化绘图工具
qp=QPainter()
#开始在窗口绘制
qp.begin(self)
#自定义画点方法
self.drawPoints(qp)
#结束在窗口的绘制
qp.end()
def drawPoints(self,qp):
qp.setPen(Qt.red)
size=self.size()
for i in range(1000):
#绘制郑玄函数图像,它的周期是【-100,100】
x=100*(-1+2.0*i/1000)+size.width()/2.0
y=-50*math.sin((x-size.width()/2.0)*math.pi/50)+size.height()/2.0
qp.drawPoint(x,y)
if __name__ == '__main__':
app=QApplication(sys.argv)
demo=Drawing()
demo.show()
sys.exit(app.exec_())
效果截图: