美文网首页
PyQt5 Bézier curve(Bézier曲线) 学习

PyQt5 Bézier curve(Bézier曲线) 学习

作者: _Mirage | 来源:发表于2020-04-05 13:20 被阅读0次

Bézier curve is a cubic(立方体的) line. Bézier curve in PyQt5 can be created with QPainterPath. A painter path is an object composed of a number of graphical building blocks, such as rectangles, ellipses, lines, and curves.

代码:

# coding='utf-8'

from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QPainterPath
from PyQt5.QtCore import Qt
import sys


class Gui(QWidget):
    def __init__(self):
        super(Gui, self).__init__()
        self.start()

    def start(self):
        self.setGeometry(300, 300, 380, 250)
        self.setWindowTitle('Bézier曲线')
        self.show()

    # 当主窗体size发生改变时就会触发这个slot\
    #       (窗体从无到有建立的过程也算是发生了改变)
    def paintEvent(self, e) -> None:
        qp = QPainter()
        qp.begin(self)
        # QPainter实例化对象的begin和end方法中间夹得就是绘制的过程\
            # 注意begin有一个参数是代表绘制到哪里,而end没有
        self.draw_bezier_curve(e, qp)
        qp.end()

    def draw_bezier_curve(self, e, qp):
        # 实例化QPainterPath对象
        #  A painter path is an object composed of\
        #     a number of graphical building blocks,\
        #     such as rectangles, ellipses, lines, and curves.
        path = QPainterPath()
        # 从哪里开始绘制
        path.moveTo(30, 30)
        # 绘制曲线
        # cubicTo构造函数:
        """
        cubicTo(self, Union[QPointF, QPoint],\
            Union[QPointF, QPoint], Union[QPointF, QPoint])
        cubicTo(self, float, float, float, float, float, float)
        """
        # 第二种构造函数: starting point, control point,\
        #           and ending point.
        # 在这里就是(30, 30)开始, (200, 350)控制曲线形状, (350, 30)结束
        path.cubicTo(30, 30, 200, 350, 350, 30)
        # 绘制出最终的曲线,这里传递给QPainter对象的参数是QPainterPath实例化对象
        qp.drawPath(path)


app = QApplication(sys.argv)
gui = Gui()
sys.exit(app.exec_())

运行结果: image.png

相关文章

网友评论

      本文标题:PyQt5 Bézier curve(Bézier曲线) 学习

      本文链接:https://www.haomeiwen.com/subject/kyluphtx.html