介绍
QPainter类在QWiget(控件)上执行绘图操作,,它是一个绘制工具,为大部分图形界面提供了高度优化的函数,使QPainter类可以绘制从简单的直线到复杂的饼图等。
绘制操作在QWidget.paintEvent()中完成。绘制方法必须放在QtGui.QPainter对象的begin()和end()之间(低级别的图形绘制功能)。
方法
方法 | 描述 |
begin() | 开始在目标设备上绘制 |
drawArc() | 在起始角度和最终角度之间画弧 |
drawFllipse() | 在一个矩形内画一个椭圆 |
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() | 设置用于绘制的笔的颜色、大小和样式 |
设置画笔风格(枚举类)
枚举类型 | 描述 |
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(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)
demo = Drawing()
demo.show()
sys.exit(app.exec_())
使用展示
绘制点
import sys, math
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import Qt
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_())
使用展示
后记
不知道怎么的,明明还有很多事情要做,但是总是静不下来。