PyQt5 组件之QPainter

Posted 在奋斗的大道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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画笔风格的掩码

实例一:绘制文字

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

效果截图:

 

以上是关于PyQt5 组件之QPainter的主要内容,如果未能解决你的问题,请参考以下文章

pyqt5——绘图

使用 QPainter 和 paintEvent 在 PYQT5 中的 QLabel 中包含的 Pixmap 上绘制圆圈

学习 PyQt5。在我的代码片段中找不到错误 [关闭]

PyQt5 组件之QDialog

PyQt5组件之QStackedWidget

PyQt5 组件之QListView