引言

在Qt界面库中,可以通过以下两种方式进行图形的绘制:

下面给出一个在Python语言下结合PyQt界面库,使用QPainter进行绘图的例子,例子中也涉及到了坐标系统的变换方法。

示例说明

该例运行界面如下图所示:

pyqtgraph绘制大量线条(二维图形的简单绘制及坐标变换示例)(1)

在主界面上分成了三个区域,每个区域上都画了一个绿色填充的矩形框。其中,第一个是原始的矩形框,第二个是在第一个的基础上缩小0.8倍并顺时针旋转45度的矩形框,第三个是仅仅顺时针旋转90的矩形框。这这个例子中使用到了QPainterPath和QPainter的坐标变换功能。

主窗口类设计

本例比较简单,主界面程序完全使用纯代码实现,在代码中设计了一个基于QWidget的类MainWindow,用作主界面的显示窗口类,其实现代码如下图所示:

pyqtgraph绘制大量线条(二维图形的简单绘制及坐标变换示例)(2)

使用QPainter绘制图形需重定义窗口类的paintEvent事件,即所有的绘制工作都是在该事件中完成的。其主要代码解释如下:

(1)第15-18行,窗口类的初始化函数。设置了窗口标题,初始化了窗口大小为600×300。

(2)第21-22行,定义一个QPainter对象p并设置抗锯齿功能。

(3)第24-27行,在主窗口上画两条竖线将其平均划分为三个区域,仅用于指示功能。

(4)第29-31行,设置矩形框的画笔及填充的画刷样式。

(5)第33-35行,定义一个QPainterPath,用来记录所画内容的过程,本例仅仅画了一个矩形框,其中心是(0,0)位置。对于一个复杂图形的绘制,使用QPainterPath的优点是,通过QPainterPath类型的变量记录整个绘画过程后,可以重复使用。如本例,在绘制三个矩形框时,只需将坐标平移及缩放后,就可以绘制不同的矩形框。

(6)第37-40行,绘制第一个矩形框。先使用save函数保存当前的坐标状态(即原始坐标状态),然后将坐标平移到(100,150)后调用绘制路径函数drawPath绘制矩形框,最后调用restore函数恢复上次的坐标状态。

(7)第42-45行,绘制第二个矩形框。由于上次绘制完成坐标已经回到了初始状态,所以此次是相对于初始位置将坐标平移到(300,150),然后再缩放、旋转完成绘制。注意,若没有上一个restore,则会在上一次的基础上进行平移。

(8)第47-50行,绘制第三个矩形框。绘制之前,先调用resetTransform函数复位所有坐标变换,然后进行绘制。

完整测试代码

程序完整测试代码如下图所示:

pyqtgraph绘制大量线条(二维图形的简单绘制及坐标变换示例)(3)

运行后就会出现本文开头所示的软件界面。

总结

本文例子演示了在Python PyQt架构下,使用QPainter进行简单绘图的过程,例子中涉及到了平移、旋转、缩放等坐标变换操作及QPainterPath类的使用等内容。

如果这篇文章对你有用的话,请关注 转发 收藏 点赞吧。

,