绘制椭圆
我们可以使用 drawEllipse() 函数绘制椭圆,就像我们在绘制圆时所做的那样。
只需相应地更改点,我们就会得到椭圆。
考虑以下代码:
def paintEvent(self, event): painter = QPainter(self) painter.setPen(QPen(Qt.green, 5, Qt.SolidLine)) painter.setBrush(QBrush(Qt.green, Qt.SolidPattern)) painter.drawEllipse(40, 40, 400, 200)
画一个实心三角形
我们可以使用 setBrush() 方法绘制一个实心三角形,如下所示:
painter.setBrush(QtCore.Qt.blue)
绘制曲线
要绘制曲线,我们应该使用 QPainterPath 模块。
首先,导入模块:
from PyQt5.QtGui import QPainterPath
在paintEvent() 方法中创建一个QPainter 和一个QPainterPath 对象:
painter = QPainter() path = QPainterPath()
重复激活painter、为painter对象渲染提示以及设置笔和画笔的步骤:
painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.setPen(QtCore.Qt.red) painter.setBrush(QtCore.Qt.red)
使用 QPainterPath 模块的 moveTo() 函数移动到窗口中的 x 和 y 轴:
path.moveTo(40, 40)
使用 QPainterPath 函数的cubicTo(),它会在当前位置和端点(x,y)之间创建一条曲线。
path.cubicTo(40, 40, 150, 250, 250, 40)
最后,使用 drawPath() 方法并传递路径对象来绘制曲线。
画一个矩形
要绘制矩形,我们将使用 QPainter 模块的 drawRect() 方法。
首先,在paintEvent函数中创建QPainter对象:
def paintEvent(self, event): painter = QPainter(self) painter.setPen(QPen(Qt.black, 5, Qt.SolidLine)) painter.drawRect(40, 40, 400, 200)
在painter 对象之后,我们使用setPen() 方法设置矩形的颜色和行样式,在我们的示例中为实线。
然后只需使用 drawRect() 方法在窗口上绘制矩形。
我们可以使用其他行样式,例如 DotLine,如下所示:
painter.setPen(QPen(Qt.black, 5, Qt.DotLine))
绘制多边形
要绘制多边形,可以使用 QPolygon 模块的 QPolygon 方法。
首先,我们必须从 QtCore 导入 QPoint,从 QtGui 导入 QPolygon,如下面的代码所示:
from PyQt5.QtGui import QPolygon from PyQt5.QtCore import QPoint
在下面的代码中,我们声明了一个点数组并将它们传递给 QPolygon() 方法并使用 drawPolygon() 方法绘制多边形。
def paintEvent(self, event): painter = QPainter() painter.setPen(QPen(Qt.black, 5, Qt.SolidLine)) painter.setBrush(QBrush(Qt.black, Qt.SolidPattern)) points = [ QPoint(10,10), QPoint(10,100), QPoint(100,10), QPoint(100,100) ] poly = QPolygon(points) painter.drawPolygon(poly)
画一条线
在本节中,我们将学习画一条线。
我们可以使用 drawLine() 函数绘制一条线。
drawLine() 函数绘制一条从 a 点到 b 点的线。
请按照以下步骤操作:
- 创建一个画家对象:
painter = QPainter()
- 现在使用 begin() 方法激活画家:
painter.begin(self)
- 现在使用 setRenderHint() 方法,该方法返回指定为画家对象设置的渲染提示的标志。
painter.setRenderHint(QPainter.Antialiasing)
- 设置行的笔:
painter.setPen(QtCore.Qt.red)
- 设置画笔:
painter.setBrush(QtCore.Qt.white)
- 最后,画一条线:
painter.drawLine(0, 0, 200, 200)
绘制一个实心矩形
我们可以使用 setBrush() 函数绘制一个实心矩形,如下所示:
def paintEvent(self, event): painter = QPainter(self) painter.setPen(QPen(Qt.black, 5, Qt.DotLine)) painter.setBrush(QBrush(Qt.yellow, Qt.SolidPattern)) painter.drawRect(40, 40, 400, 200)
画一个三角形
要绘制三角形,可以使用 QPainterPath 模块的 lineTo() 函数。
考虑下面的代码:
def paintEvent(self, event): painter = QPainter() path = QPainterPath() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.setPen(QtCore.Qt.blue) path.lineTo(160, 400) path.lineTo(350, 100) path.lineTo(10, 25) painter.drawPath(path)
在上面的代码中,我们创建了各个类/模块的对象。
然后激活画家并呈现提示。
然后设置钢笔(钢笔颜色)。
最后,我们在不同的点上使用三个 lineTo() 函数来创建三条线,以便将它们连接在一起:
画一个实心圆
我们可以使用 QBrush 绘制实心圆。
设置图案的颜色和图案样式。
- 设置画笔,就像我们在上一节中使用 Painter 对象设置笔一样:
painter.setBrush(QBrush(Qt.red, Qt.SolidPattern))
整个painterEvent函数将是这样的:
def paintEvent(self, event): painter = QPainter(self) painter.setPen(QPen(Qt.green, 8, Qt.SolidLine)) painter.setBrush(QBrush(Qt.red, Qt.SolidPattern)) painter.drawEllipse(40, 40, 400, 400)
我们可以使用许多其他模式,例如,交叉模式:
painter.setBrush(QBrush(Qt.red, Qt.CrossPattern))
创建一个 PyQt5 窗口
要创建窗口,请导入以下模块:
from PyQt5 import QtGui from PyQt5.QtWidgets import QApplication, QMainWindow import sys
现在创建 Window 类,它为我们的应用程序提供了一个窗口,我们可以其中拥有菜单列、状态列、图形等。
在这个类中,我们将有两个方法;第一个方法是构造函数,在创建类的对象时会自动调用。
第二个方法称为InitWindow,它设置我们在构造函数中定义的参数,例如我们应用程序窗口的标题、长度和宽度等。
class Window(QMainWindow): def __init__(self): super().__init__() self.title = "PyQt5 Drawing Tutorial" self.top= 150 self.left= 150 self.width = 500 self.height = 500 self.InitWindow() def InitWindow(self): self.setWindowTitle(self.title) self.setGeometry(self.top, self.left, self.width, self.height) self.show()
在构造函数中,参数被初始化,在 InitWindow() 方法中,使用 setGeometry() 函数将参数应用于窗口。
现在主要步骤: 创建 QApplication 的实例和 Window 类的对象,然后执行窗口。
App = QApplication(sys.argv) window = Window() sys.exit(App.exec())
绘制水平线
我们可以使用 drawLine() 方法绘制一条水平线。
考虑以下代码:
def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.setPen(QtCore.Qt.red) painter.setBrush(QtCore.Qt.white) painter.drawLine(400, 100, 100, 100)
代码与上一节相同,但我们必须在 drawLine() 函数中组织点以获得水平线。
这将生成以下结果:
同样,我们可以通过在 drawLine() 函数中使用以下几点来创建一条垂直线:
painter.drawLine(100, 100, 100, 400)
在本教程中,我们将学习如何在 PyQt5 中绘制矢量图形。
在 Python 中,PyQt5 模块是我们可以用于绘图目的的最简单的模块。
在开始之前,让我们使用 PyQt5 创建一个窗口,我们将其中绘制图形。
画半圆
要创建一个半圆,我们将使用 drawArc() 方法。
请按照以下步骤操作:
- 创建一个画家对象:
painter = QPainter()
- 现在使用 begin() 方法激活画家:
painter.begin(self)
- 现在使用 setRenderHint() 方法,该方法返回指定为画家对象设置的渲染提示的标志。
painter.setRenderHint(QPainter.Antialiasing)
- 设置圆弧的笔:
painter.setPen(QtCore.Qt.green)
- 设置画笔:
painter.setBrush(QtCore.Qt.white)
- 最后,绘制弧线:
painter.drawArc(100, 70, 300, 300, 0 * 16, 180 * 16)
前两个参数分别是 x 和 y 轴。
然后我们有弧的宽度和大小,然后是起始角度。
最后,我们定义了跨度角。
我们可以通过将 180 度更改为 -180 度来创建一个倒置的半圆:
painter.drawArc(100, 70, 300, 300, 0 * 16, -180 * 16)
要创建垂直半圆:
painter.drawArc(100, 70, 300, 300, 90 * 16, 180 * 16)
画圆弧
我们可以使用 drawArc() 方法绘制圆弧。
drawArc() 函数的语法如下:
drawArc(x_axis, y_axis, width, length, startAngle, spanAngle)
在以下示例中,我们将创建一个从 0 度到 90 度的弧:
def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.setPen(QtCore.Qt.red) painter.setBrush(QtCore.Qt.white) painter.drawArc(100, 70, 300, 300, 0 * 16, 90 * 16)
在图像上绘图
为此,我们从 QtWidgets、QtGui 和 QtCore 模块中导入了所有内容,如下所示:
from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import *
现在paintEvent方法:
- 创建一个 QPainter 对象。
- 然后为了导入图像,我们创建了 QPixmap 的对象并将链接传递给图像。我们的图像如下所示:
- 现在我们必须在窗口上显示图像;我们使用了 drawPixmap()。
- 设置笔(矩形的行颜色和行样式)。
- 使用 drawLine() 绘制矩形,它将绘制在图像的顶部。
def paintEvent(self, event): painter = QPainter(self) pic = QPixmap("Shape_1.png") painter.drawPixmap(self.rect(), pic) painter.setPen(QPen(Qt.red, 8)) painter.drawRect(40, 40, 400, 200)
画一个箭头
要绘制箭头,一条是水平线,其余两条线为箭头的头部。
我们可以使用 drawLine() 函数绘制这些线。
考虑下面的代码:
def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.setRenderHint(QPainter.Antialiasing) painter.setPen(QtCore.Qt.red) painter.setBrush(QtCore.Qt.white) painter.drawLine(400, 100, 100, 100) painter.drawLine(150, 150, 100, 100) painter.drawLine(150, 50, 100, 100)
第一个 drawLine() 函数用于绘制水平线,第二个函数创建箭头的下部,第三个函数创建箭头的上部。
画一个圆圈
要绘制图形,请导入以下模块:
from PyQt5.QtGui import QPainter, QBrush, QPen from PyQt5.QtCore import Qt
QPainter 提供了各种功能来绘制基本形状。
例如,行、矩形等。
QBrush 模块为形状提供颜色、纹理等。
QPen 定义了 QPainter 的工作方式,即 QPainter 应该如何设计或者设计形状。
- 第一步是定义完成所有绘画工作的方法;该方法是paintEvent():
def paintEvent(self, event):
- 创建一个画家对象:
painter = QPainter(self)
- 现在为画家设置 QPen 并将颜色和样式分配给圆圈的行:
painter.setPen(QPen(Qt.green, 8, Qt.DashLine))
值 8 是圆线的宽度。
- 使用 drawEllipse(x_axis, y_axis, width, height) 绘制圆。我们使用我们在步骤 2 中创建的画家对象调用 drawEllipse() 方法。定义 x 和 y 轴,圆将在窗口中放置的位置以及大小(高度和宽度)。
painter.drawEllipse(40, 40, 400, 400)
在这个例子中,我们使用了 DashLine 作为行样式;我们还可以使用 SolidLine 创建一个实线连续圆,如下所示:
painter.setPen(QPen(Qt.green, 8, Qt.SolidLine))
绘制渐变
我们将使用 LinearGradient,为此,我们将导入 QLinearGradient 模块。
from PyQt5.QtGui import QLinearGradient def paintEvent(self, event): painter = QPainter() painter.setPen(QPen(Qt.black, 5, Qt.SolidLine)) grad = QLinearGradient(80, 40, 30, 10) painter.setBrush(QBrush(grad)) painter.drawRect(10, 10, 200, 200)
我们已经创建了一个渐变对象并将值传递给 QLinearGradient 模块。
接下来,我们将颜色值传递给 QLinearGradient 模块,最后,我们使用渐变对象设置画笔。