引言
对于Python下桌面软件的开发已经有了很多数据可视化的库,如Matplotlib、Seaborn、Pyqtgraph、Plotly等等,但这些库更适合于后端程序员的软件开发。
实际上在前端网页开发方面,也有很多很多漂亮的界面设计方案,也包括很多很多数据可视化方面的强大控件。基于此,我们是否可以考虑这样一种桌面软件的开发架构方案,即将前端技术融入到Python开发中,结合PyQt界面库,将前端网页界面无缝集成到PyQt的窗口中,大部分的功能依托于前端技术来实现,而PyQt仅作少部分辅助的诸如窗口生成、事件处理等工作,基于这样的架构进行桌面软件的开发,既能充分利用Python的快速开发优点,又能使用成熟的前端技术,应该是一个比较好的软件开发方案。
下面通过一个简单的例子来介绍这种方案的可行性,该例使用Python3语言,利用PyQ5界面库搭建界面窗口框架,然后在窗口中嵌入ECharts库进行数据的可视化。
简单介绍下ECharts库,它是一个使用JavaScript实现的开源可视化库,可流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。它具有丰富的可视化类型,提供了常规的折线图、柱状图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图、treemap、旭日图,多维数据可视化的平行坐标,还有用于BI的漏斗图,仪表盘,并且支持图与图之间的混搭等等。总之,ECharts库是一具非常强大的数据可视化库。
实例运行界面
该例运行界面情况如下图所示:
使用PyQt5设计软件界面框架,主界面分为上下两部分,上面是一个Widget窗口控件,在里面嵌入网页通过一个柱状图显示某两个公司产品的全年季度销量趋势对比情况,下面加了两个按钮控件,分别控制启停数据的实时更新(使用仿真数据,仅为演示实时绘图刷新功能)及清除工作。
该例子的文件组成结构如下图所示:
整个工程放在webDemo文件夹中,其中,Main.py、Main.ico、Main.ui分别为主程序、应用程序图标及设计师设计的界面文件,Ui_Main.py为将Main.ui转换为Python后的文件,html子文件夹存放了网页相关的文件。
大体设计思路如下:
前端文件准备:下载ECharts的库文件,这儿使用的是echarts.min.js,编写柱状图网页文件bar.html;主界面设计:用设计师设计程序主界面文件Main.ui,并将其转换为对应的.py文件,即Ui_Main.py;主程序功能实现:编写主Python程序Main.py,搭建界面,嵌入网页并实现槽函数功能。
前端文件准备
在