一、介绍
QPainter类在小部件和其他绘画设备上执行低级绘画。 QPainter提供了高度优化的功能,可以完成GUI程序所需的大多数绘图。它可以绘制从简单的线条到复杂的形状(如馅饼和和弦)的所有内容。它还可以绘制对齐的文本和像素映射。通常,它会绘制一个"自然"坐标系,但它也可以进行视图和世界变换。QPainter可以对任何继承QPaintDevice类的对象进行操作。
QPainter官网介绍文档
二、继承
QPainter 继承自 PyQt5.QtGui QStylePainter 继承自QPainter
三、最简单的画线代码
下面是在要给窗口里画了两条线,一条竖线,一条横线。
from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor, QPen,QPainter,QPaintEvent
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QPainter-演示")
self.resize(400,300)
def paintEvent(self,p:QPaintEvent):
painter = QPainter()
painter.begin(self)
pen = QPen(Qt.red,2)
painter.setPen(pen)
painter.setBrush(QColor(0,255,6))
painter.drawLine(50,100,150,100)
painter.drawLine(100,50,100,150)
painter.end()
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
要完成绘画需按照上面基本代码规则来写。
1、代码需要写在 paintEvent()方法内 。 2、绘画开始前先实例化一个画家,painter = QPainter()。 3、绘画的代码以painter.begin(QPaintDevice)开始,以painter.end()结束。 4、给画家设置画笔、笔刷等属性。 5、具体绘画。
四、一些设置
1、setPen() 设置画笔
用于定义绘制线条或边界的颜色、线宽 这个方法有三种形式:
- setPen(Union[QColor, GlobalColor, QGradient])
- setPen(Union[QPen, QColor, GlobalColor, QGradient])
- setPen(PenStyle)
2、setBrush()设置笔刷
用于设置填充形状的颜色或图案。 这个方法有两种形式:
- setBrush(Union[QBrush, QColor, GlobalColor, QGradient])
- setBrush(BrushStyle)
3、 setFont()设置字体
用于设置绘制文字的字体和大小 setFont(QFont)
4、 setOpacity() 设置不透明度
将画家的不透明度设置为不透明度。该值应在 0.0 到 1.0 的范围内,其中 0.0 表示完全透明,1.0 表示完全不透明。 setOpacity(float)
五、绘图方法
1、drawPoint() 画单个点
在指定位置画一个点。
- drawPoint(Union[QPointF, QPoint]) # 输入QPointF或 QPoint确定点的位置
- drawPoint(QPoint) # 输入要给QPoint对象确定点的位置
- drawPoint(int, int) #输入如两个整数确定点的位置
2、drawPoints() 画多个点
一次画多个点
- drawPoints(QPolygonF)
- drawPoints(QPolygon)
- drawPoints(Union[QPointF, QPoint], …) #同时用整数点 或浮点数点生成多个点
- drawPoints(QPoint, …) #使用整数精度点对象生成多个点
3、drawLine() 画单条线
划线方法有5中,根据需要使用。
- drawLine(QLineF) # 输入一个浮点精度生成的QLineF对象
- drawLine(QLine) # 输入一个整数精度生产的QLine对象
- drawLine(QPoint, QPoint) # 输入两个点QPint生产一条线
- drawLine(Union[QPointF, QPoint], Union[QPointF, QPoint]) #使用QPointF 和QPoint生成一条线,两点一个是浮点数生成,一个是整数生成。
painter.drawLine(QPoint(50,90),QPointF(150.0,210.7))
- drawLine(int, int, int, int) #输入4个整数生成一条线
painter.drawLine(50,50,200,200)
4、drawLines()画多条线
可以同时画多天线,有8中方式。
- drawLines(Iterable[QLineF]) #输入元素为QLineF的可迭代对象
下面例子是把多个QLineF对象放入列表中
painter.drawLines([
QLineF(QPoint(0,0),QPoint(50,100)),
QLineF(QPoint(0,0),QPoint(200,200)),
QLineF(QPoint(0,0),QPoint(300,200))
])
- drawLines(Iterable[Union[QPointF, QPoint]])
- drawLines(Iterable[QLine]) #输入元素是QLine的可迭代对象生成多条线
- drawLines(Iterable[QPoint]) #输入元素是QPoint的可迭代对象生成多条线
- drawLines(QLineF, …) #输入多个QLineF生成多条线
- drawLines(Union[QPointF, QPoint], …)
- drawLines(QLine, …)
- drawLines(QPoint, …)
5 、drawRect() 画矩形
6、 drawRoundedRect() 画圆角矩形
7、drawEllipse() 画椭圆
8、drawArc() 画弧
9、drawPie()
10、drawChord()
11、drawPolyline() 画多段线
12、drawPolygon() 画多边形
13、drawConvexPolygon() 画凸多边形
14、 draw Cubic Bezier()绘制三次贝塞尔曲线
有空继续写。。。
|