PyQt5基本控件详解之QPainter(十七)

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 画笔风格的掩码

效果参考下图
PyQt5基本控件详解之QPainter(十七)_第1张图片

实例一:绘制文字

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_())

效果图如下
PyQt5基本控件详解之QPainter(十七)_第2张图片

代码分析

在这个例子里,首先定义了待绘制的文字,然后定义了一个绘制事件,所有的绘制操作都发生在此事件内,

        self.text='欢迎学习 PyQt5'

    def paintEvent(self,event):
        painter=QPainter()
        painter.begin(self)
        #自定义绘制方法
        self.drawText(event,painter)
        painter.end()

QtGui.QPainter类负责所有最低级别的绘制,所有的绘制方法都要放在begin()和end()之间,这个例子放置的是自定义的drawText()方法
自定义的核心代码如下

    def drawText(self,event,qp):
        #设置画笔的颜色
        qp.setPen(QColor(168,34,3))
        #设置字体
        qp.setFont(QFont('SimSun',20))
        #绘制文字
        qp.drawText(event.rect(),Qt.AlignCenter,self.text)

实例二:绘制点

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_())

效果图如下
PyQt5基本控件详解之QPainter(十七)_第3张图片

代码分析

在这个例子中,在窗口的工作区绘制正弦函数图形,周期是【-100,100】

 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)

画笔颜色设置为红色,使用预定义的Qt.red颜色

qp.setPen(Qt.red)

每次调整窗口的大小时,会生成一个绘图事件,使用size()方法得到窗口的当前大小,在新的窗口中随机分布工作区的点

size=self.size()

使用drawPoint()方法绘制一个个点

qp.drawPoint(x,y)

  • Qpainter
    • 前言:必读
    • QPainter绘制常用方法
      • 画笔风格(Penstyle)
    • 实例一:绘制文字
      • 代码分析
    • 实例二:绘制点
      • 代码分析

源码以及相关文件下载:https://download.csdn.net/download/jia666666/10597897

你可能感兴趣的:(PyQt5基本窗口控件)