PyQt与echarts的简单结合

安装

2022年5月16日版本升级
pip install pyecharts==0.5.1

pip install pyecharts==1.9.1
pip install -U PyQtWebEngine==5.15.1

初始化界面

​​​​​​

自定义模板

其中引入了echarts.min.js

<!DOCTYPE html>
<html style="height: 100%">
<head>
    <meta charset="UTF-8">
    <title>Echarts</title>
</head>
<body style="height: 100%; margin: 0">
<div id="container" style="height: 100%"></div>
<!--2022年5月16日版本升级-->
<!--<script type="text/javascript" src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script>-->
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts@5.3.2/dist/echarts.min.js"></script>
</body>
</html>

使用QWebEngineView加载本地html

loadFinished信号确保html加载完成后渲染画布

url = QUrl("file:///template.html")
self.view.load(url)
self.view.loadFinished.connect(self.set_options)

图表渲染

self.echarts确保首次加载时才初始化echarts,这里用到了runJavaScript方法,可以直接执行js代码;self.get_options得到myChart用的options(详细说明),这里直接用pyecharts生成,见self.create_pie,其它类型图表参照此方法即可;

def set_options(self):
    if not self.view:
        return
    if not self.echarts:
        # 初始化echarts
        self.view.page().runJavaScript(
            '''
                var myChart = echarts.init(document.getElementById('container'), 'light', {renderer: 'canvas'});
            '''
        )
        self.echarts = True
    options = self.get_options()
    if not options:
        return
    self.view.page().runJavaScript(
        f'''
            var option = eval({options});
            myChart.setOption(option);
        '''
    )

def get_options(self):
    v1, v2, v3, v4, v5, v6 = self.spinbox1.value(), self.spinbox2.value(), self.spinbox3.value(), self.spinbox4.value(), \
                             self.spinbox5.value(), self.spinbox6.value()
    v = [v1, v2, v3, v4, v5, v6]
    if self.combobox_type.currentIndex() == 0:
        # 饼图
        options = self.create_pie(v)
    elif self.combobox_type.currentIndex() == 1:
        # 柱状图
        options = self.create_bar(v)
    elif self.combobox_type.currentIndex() == 2:
        # 折线图
        options = self.create_line(v)
    elif self.combobox_type.currentIndex() == 3:
        # 折线、柱状图
        options = self.create_line_bar(v)
    else:
        return
    return options

def create_pie(self, v):
	pie = Pie()
	pie.add("商家", list(zip(ATTR, v)))
	pie.set_global_opts(title_opts=opts.TitleOpts(title=TITLE_TEXT, subtitle=TITLE_SUBTEXT))
	return pie.dump_options()

主题切换

def change_theme(self, theme):
    if not self.view:
        return
    options = self.get_options()
    if not options:
        return
    self.view.page().runJavaScript(
        f'''
            myChart.dispose();
            var myChart = echarts.init(document.getElementById('container'), '{theme}', {{renderer: 'canvas'}});
            myChart.clear();
            var option = eval({options});
            myChart.setOption(option);
        '''
    )

截图


效果图如下,另附上源码下载地址:pyqt、echarts示例


  • 25
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 28
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

llc的足迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值