python绘制坐标系_Python+PyQt架构:GraphicsView快速绘
图⼊门及。。。
绘图架构Graphics View介绍
在Qt界⾯库中,对于图形的绘制,在前⾯⼀篇⽂章中(可参考:),介绍了⼀种使⽤QPainter实现普通⼆维图形的绘制⽅法,该⽅法在paintEvent事件⾥编写绘图程序,其本质绘制的图形是位图,这种⽅法更适合于绘制复杂度不⾼的固定图形,并且不能实现图项的选择、编辑、拖放、修改等交互功能。
对于需要绘制⼤量的、需要交互的图形,可使⽤Graphics View绘图架构,它是⼀种基于图形项(Graphics Item)的模型/视图模式,这种⽅式可以在⼀个场景中可绘制⼤量图元项,且每个图元项都是可选择、可交互的。
在Graphics View绘图架构中,主要涉及到下⾯三个类的使⽤:
1. 场景类(QGraphicsScene):该类提供绘图场景(Scene),场景是不可见的,是⼀个抽象的管理图形项的容器,可向场景中添加图形项,获取场景中的某个图形项等;
2. 视图类(QGraphicsView):该类提供绘图的视图(View)组件,⽤于显⽰场景中的内容。可以为⼀个场景设置⼏个视图,⽤于对同⼀个数据集提供不同的观察⽅式;
3. 图形项类(QGraphicsItem):该类提供了⼀些基本的图形元件,也可在此基础上⾃定义图形项,它⽀持各种事件的响应,如⿏标事件、键盘事件、拖放事件等,以实现图形的交互功能。
在Graphics View绘图架构中涉及到了3个坐标系,即场景坐标、视图坐标及图形项坐标。其中,场景坐标类似于QPainter的逻辑坐标,⼀般以场景的中⼼为原点;视图坐标是窗⼝界⾯的物理坐标,其左上⾓为原点坐标;图形项坐标是局部逻辑坐标,通常以图件的中⼼为原点。
下⾯给出⼀个在Python语⾔下结合PyQt界⾯库,使⽤Graphics View架构进⾏绘图的例⼦,例⼦中也涉及到了坐标系统的理解。
⽰例说明
该例运⾏界⾯如下图所⽰:
在主窗⼝的视图上显⽰了四个图元(图元项),包括三个可选择、可移动且不同填充颜⾊的圆形,⼀个标识场景⼤⼩的矩形框。当⿏标移动时,在状态栏中实时显⽰当前⿏标位置的三种坐标,即视图(View)坐标、场景(Scene)坐标及图形项(Item)坐标。
本例主界⾯的Python程序使⽤纯代码⽅式实现,下⾯给出该例的实现过程。
⾃定义的视图类设计
python新手代码画图由于在视图中需要监视获取当前的⿏标移动位置,故设计了⼀个单独的基于QGraphicsView基类的视图类,其实现代码如下图所⽰:
该类中定义了⼀个⾃定义信号sigMouseMovePoint,当⿏标移动时,在mouseMoveEvent事件中,将当前的⿏标位置发送出去。
主窗⼝类设计
主窗⼝基于QMainWindow类,在其中添加⼀个视图控件⽤于显⽰图元及⼀个状态栏控件⽤于显⽰坐标。其实现代码如下图所⽰:
其主要代码解释如下:
(1)第25-31⾏,窗⼝类的初始化函数,并且设置了视图类sigMouseMovePoint信号响应的槽函数。
(2)第33-48⾏,在主窗⼝上创建视图控件并将其设置为中⼼部件,设置状态栏信息。
(3)第50-67⾏,在视图中完成图形的绘制。先创建视图的场景,然后创建矩形框,其⼤⼩为场景⼤⼩,将矩形框添加到场景中,然后依次创建三个圆形,其位置分别为矩形框的左边界、中⼼及右边界,设置为可移动、可选择及可设置焦点属性,最后将其添加到场景中。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论