Python - 生成热力图并显示(PyQt+pyecharts)

5 篇文章 8 订阅

1、前言

由于需求,需要在界面端显示热力图(以地图形式),查阅了比较多的资料,对比了C++和Python,发现还是Python对热力图的支持比较好,所以采用了Python作为开发语言。(如果C++有比较好的方式,欢迎交流)

在此记录一下相关的实现方式,以方便日后查阅。

2、pyecharts

Echarts是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts诞生了。

关于 pyecharts 的强大不用介绍太多,上面那句话就够了。更多内容请访问:https://pyecharts.org/#/zh-cn/intro

3、PyQt

由于是采用Python作为界面开发语言,所以pyqt是一个比较好的选择。更多关于pyqt的内容,请访问:https://blog.csdn.net/bailang_zhizun/article/details/79310419

4、界面显示热力图

由于热力图是通过 pyecharts  生成的,而 pyecharts  生成 的热力图是以 .html 文件的形式保存的,我们当然可以选择通过手动打开html文件的方式来浏览,但作为程序员,有代码为什么要人工呢?

在QT中,提供了相关的类用于显示网页:QWebEngineView,关于 QWebEngineView 的使用方法可以访问QT的官网进行查看,在此不多做叙述。

所以,在pyqt中,我们也通过这个类来显示网页,下面是代码:

class HeatmapWidget(QWidget):
    def __init__(self):
        super(HeatmapWidget, self).__init__()

        # 创建控件
        self.frm_show = QFrame()          # 最好定义一个frame空间,将QWebEngineView对象放进去

        self.main_layout = QHBoxLayout()  # 界面主布局

        # 用于显示网页
        self.my_html = QWebEngineView()   # 无干扰情况下的实时热力图的显示

        frm_layout = QHBoxLayout()                         # self.frm_show的布局
        frm_layout.addWidget(self.my_html )

        self.frm_show.setLayout(frm_layout)

        self.main_layout.addWidget(self.frm_show)

        self.setLayout(self.main_layout)

 此时,界面就定义好了,界面中包含一个frame控件,然后将QWebEngineView 控件对象放进去。

显示网页:

html_path = "file:///" + os.path.abspath("file.html")

# repr() 函数可以将字符串转换为python的原始字符串(即忽视各种特殊字符的作用)
# 然后再使用eval() 函数将原始字符串转换为正常的字符串,不使用eval 输出的字符串会带有 ' ' 引号。
# str() 和 repr() 都是把对象转换为字符串,但 str() 转换的字符串对用户友好, repr() 转换的字符串对python友好。
new_str = eval(repr(html_path).replace('\\', '/'))

self.my_html.load(QUrl(new_str))  # reload刷新

刷新网页:

self.my_html.reload()               # reload刷新

5、程序打包遇到的问题

5.1、提示找不到pyecharts的相关文件

我在使用pyinstaller打包程序时,使用的 -F 模式,即所有的文件都打包成一个文件(这样会造成生成的文件比较大,启动慢,但好处是只生成了一个文件,看起来简洁)(使用 -c 模式,可以在运行.exe时显示提示信息),但是对于pyecharts的打包并不友好,会造成无法将pyecharts的相关文件打包在一起的问题,即使使用了 --add-data参数也无济于事,所以最终是采用 -D 模式打包程序:

pyinstaller -D -c main.py  # 加入 -c 参数是为了看到运行时的运行提示信息,可以使用 -W 参数,这样就不会显示命令行窗口

在生成之后,将安装的pyecharts模块目录下的datasets和render文件夹拷贝到生成的dist/main/pyecharts目录下(pyecharts为新建文件夹),main为我生成的程序的名称(对应main.py)

 拷贝到->

 这个问题就解决了。

5.2、提示找不到QtWebEngineProcess.exe

提示信息:Could not find QtWebEngineProcess.exe,但是QtWebEngineProcess这个程序是在生成的目录下的,如下所示:

 由此可见,可能这个文件的目录位置不对。

此时,可以把dist/main/PyQt5/Qt/bin 和 dist/main/PyQt5/Qt/resources下面的所有文件复制到dist/main/下就可以了,main是项目名。此时问题就解决了。

当然,此时还有另外一种解决方式,根据运行时提示的信息如下:

在运行时,程序是先在/dist/resources目录下查找是否有Qt WebEngine resources文件,所以,可以将dist/main/PyQt5/Qt/resources拷到dist目录下

然后程序又在/dist/main/qtwebengine_locals目录下查找是否有QtWebEngineProcess.exe,所以可以在/main目录下新建qtwebengine_locals文件夹,然后将dist/main/PyQt5/Qt/bin下的所有文件拷贝到qtwebengine_locals目录下,这样也能正常运行。如下图所示:

 

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值