PyQt5之窗口绘图类控件QPainter

PyQt5之窗口绘图类控件QPainter

QPainter类在QWidget上执行绘图操作,它是一个绘图工具,为大部分图形界面提供了高度优化的函数,绘制操作在QWidget.paintEvent()中完成。绘制方法必须放在QtGui.QPainter对象的begin()end()之间。

一、QPainter类中的常用方法

方法 描述
begin() 开始在目标设备上绘制
drawArc() 在起始角度和最终角度之间画弧
drawEllipse() 在一个矩形内画一个椭圆
drawLine(int x1,int y1,int x2,int y2) 绘制一条指定了端点坐标的线
drawPixmap() 从图像文件中提取Pixmap并将其显示在指定的位置
drawPolygon() 使用坐标数组绘制多边形
drawRect(int x,int y,int w,int h) 以给定的高度和宽度从左上角坐标(x,y)绘制一个矩形
drawText() 显示给定坐标处的文字
fillRect() 使用QColor参数填充矩形
setBrush() 设置画笔风格
setPen() 设置用于绘制的笔的颜色、大小和样式

二、画笔风格

枚举类型 描述
Qt.NoPen 没有线
Qt.SolidLine 一条简单的线
Qt.DashLine 由一些像素分隔的短线
Qt.DotLine 由一些像素分隔的点
Qt.DashDotLine 轮流交替的点和短线
Qt.DashDotDotLine 一条短线,两个点
Qt.MPenStyle 画笔风格的掩码

三、绘制文字

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Win(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(200, 200, 400, 400)
        self.setWindowTitle('在窗口中绘制文字')
        self.text = "Hello Python"

    def paintEvent(self, event):
        painter = QPainter(self)
        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)
    form = Win()
    form.show()
    sys.exit(app.exec_())

运行效果如下:
PyQt5之窗口绘图类控件QPainter_第1张图片

四、绘制点

import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Win(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(200, 200, 400, 400)
        self.setWindowTitle('在窗口中绘制点')

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

    def drawPoints(self,painter):
        painter.setPen(Qt.red)#设置画笔的颜色
        size = self.size()
        for i in range(1000):
            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
            painter.drawPoint(x,y)
            
if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = Win()
    form.show()
    sys.exit(app.exec_())

运行效果如下:

PyQt5之窗口绘图类控件QPainter_第2张图片

你可能感兴趣的:(Python)