c语言可视化_遗传算法可视化项目(6):用PyQt5实现数据可视化

昨天讲了一下Python和C语言交互,没有看昨天或者之前的文章点一下历史消息或者这里:

遗传算法可视化项目(1):概述

遗传算法可视化项目(2):获取信息

遗传算法可视化项目(3):创建图的数据结构

遗传算法可视化项目(插曲):关于距离的计算

遗传算法可视化项目(4):遗传算法

遗传算法可视化项目(5):C语言和Python交互

今天来讲一下用PyQt5实现数据可视化,首先把之前的文本文件(海南省所有镇的经纬度.txt),复制一份放在和昨天那个pyd文件同目录,接着就是新建一个Python文件,我用anaconda新建,因为我用的是anaconda,本身就自带PyQt5,不需要额外安装,既然用的是anaconda,之前我用过里面的Anaconda Prompt,这次还是依旧找到Anaconda Prompt,附近应该有一个Spyder,点击打开,然后点击左上角的File→new File,然后点击File→Save as,改个名字(我这里就叫main.py了)存放到和之前库文件(pyd文件)同目录,然后就是编写main.py了,首先导入开发包,代码如下:

aacf427675d201705242290dd8d401ca.png

core库是我昨天弄的,因为我要数据可视化,必须把点和边画上去,就简单的画一个点太小了(点就一个像素),所以我用小正方形(4*4像素)代替点,因为我是要用PyQt5画点和线,我首先就是想到了QWidget类里面有一个PaintEvent方法就是控制画图事件的,因此我只要自定义一个类(名字随便,我这里就叫Window了)继承QWidget然后重写里面的PaintEvent方法就行,Window类和构造方法代码如下:

c79fcb14f28568da80895ab50d5e41b3.png

注意一下 __init__是开头两个下划线,结尾两个下划线,self和C++,Java,C#的this差不多(为了规范还是建议使用self,全部换成this也可以运行,但不能一会this一会self!),super().__init__()表示调用父类(QWidget)的构造方法,init_ui方法是用来生成一个窗口的,具体实现代码如下:

9a17e219d24ad0868c4aba4831c936e2.png

setGeometry实际上是父类方法,当然子类也能用,这个方法总共有四个参数,前两个参数表示窗口左上角位置(屏幕左上角x=0,y=0,向右是x轴正方向,向下是y轴正方向,在这里x=50,y=50),后两个表示窗口大小,我这里窗口大小就是900*900了,弄太大屏幕放不下。然后就是第二个父类方法setWindowTitle,就一个参数,参数类型是字符串,这个函数就是给你的窗口起个名字的,我这里就叫“数据可视化”了,这里名字可以随便叫。然后就是最后一个父类方法show了,意思就是用来显示到屏幕的,也没什么好讲的。

接下来就是重写父类QWidget的PaintEvent方法了,代码如下:

2281a5f27b92f31ce558244c56e0ca11.png

虽然参数e没有用到,但不能不写,不写的话就不是重写了,而是子类自己的方法了,然后就是使用QPainter类的构造方法构造一个qp的变量,用来监视绘画事件,然后就是开始,画点,画线,结束,画点方法的代码如下:

1ef9e3edca67ed9ef7b30d263d062047.png

因为这里参数没有self(用不到self),所以我这里就把这个方法定义成一个静态方法,setPen是用来设置画笔颜色粗细啥的,这里我就设置成红色了,当然其他颜色也可以,然后就是一个for循环,获取点的数据然后画上去,getPoint这个函数我昨天讲过了,今天就不讲了,重点是最后一个drawRect方法,四个参数,前两个表示矩形左上角的位置,后两个表示矩形的大小,我在这里宽和高都是4,所以画出来是一个4*4的小正方形。

接着就是画线,具体实现代码如下:

652042d0f8e4cff1de7d9402da3ea80b.png

首先使用QPen类的构造方法构造一支笔(构造了如要使用必须让qp监视器知道才行,后面的setPen方法就是用来告诉监视器的),这个构造方法我传入了三个参数,第一个参数:画笔颜色,第二个参数:粗细程度,第三个参数:线的种类,这里是实线,接着就是for循环遍历图这个数据结构了,如果边可达就用drawLine画上线,drawLine方法有四个参数,前两个是表示第一个点的x和y的坐标值,后两个是第二个点的x和y的坐标值,我为了让线的端点是之前画的小正方形正中心,我就把原来端点的坐标往右偏移了两个像素,往下偏移了两个像素,之前的小正方形是四个像素。

最后是主函数,代码如下:

d55503f307499701db1bb90a7956e288.png

首先开始计时start,然后就是初始化图这个数据结构,然后就是使用QApplication类的构造方法创建一个应用对象app,接着就是构造之前的Window的对象,然后结束计时end,end-start表示时间差(也就是用来看程序运行需要多长时间),最后不要忘了写退出函数!

接着就是运行了,按F5快捷键即可,当然也可以在左上角找到并点击Run→Run也可以,最终运行出来应该是这样:

e810b8cbf3b68104fdc00d2ac56fd6a1.png

左边是我的程序结果(也就是一个窗口),右边是控制台输出的东西,也就是时间(单位s),虽然运行出来了,但一旦关闭窗口控制台会报错,报错如下:

4307bdac35ce4d9ecc64f61533a2d95e.png

出现问题是可能因为ipython console对PyQt5不怎么友好,所以我们必须使用Python console,可是我的sypder版本太新,已经没有Python console了,但是不要急,我还是能够让它没有问题,打开Anaconda Prompt,切换到main.py的目录,然后什么东西都不要输,直接输入命令python main.py回车即可!我就给大家看一下Anaconda Prompt命令行运行关闭窗口之后是否还像刚才那样出现问题,命令行Anaconda Prompt运行结果看一下这里(这里只给大家看一下关闭窗口控制台上有没有像刚才那样出问题):

8df33b6f05fe311cff65b57e6cdd5e6c.png

虽然问题已经解决了,但还是太麻烦了,毕竟运行一下明明是快捷键和鼠标点几下的事却要输入命令,确实有点麻烦!最后我不得不使用pycharm来运行这个程序了。

如果安装好了pycharm的话就在桌面上找到pycharm的图标,双击打开,如果是第一次安装将就一直默认点下去,当然要设置字体字号背景颜色啥的我也没话说,实在不会设置只能将就默认了,直到出现这个:

be4dc4b34ce7a54412fa240bb74eaeb4.png

点击create new project,然后弹出一个这样的窗口:

9613bb91c8d1d52d95d4e48995b012a2.png

选择下面的Existing interpreter,然后点击Interpreter右边的三个点,出来这个:

0539c56f4da60fce7485560462b03b26.png

点击System Interpreter,然后点击那三个点,然后就是找到anaconda安装目录里面的python.exe文件,选中那个文件,点击OK就行了,然后再点OK,最后点击create等待片刻就好,然后就是点击左上角的file→open,找到之前编写的main.py打开,接着找到这里:

2ffeff58a5d5c32ab2a21d2f1cb74c55.png

鼠标点击那个绿绿的(一提到绿绿的就想起了原谅帽)类似于播放的按钮,然后点击Run main就可以运行了,还是像刚刚那样给大家看一下控制台,运行结束关闭窗口后控制台如下:

b23e8bcba2d5702e1eb250e0d3783e6c.png

同样的也没有之前的错误了,今天的内容结束了,文章最后附上项目地址:https://github.com/3480430977/DataVisualizationOfGA

最后欢迎大家扫码关注

f1c2392bbcd3184d8f35a7ba634a4a74.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值