目录
- Echarts官网下载Html示例
- QtDesigner绘制界面
- 展示图表
- 动态修改图表数据
Echarts官网下载Html示例
Echarts官网:https://echarts.apache.org/zh/index.html
以折线图为例:
| <!DOCTYPE html> |
| <html lang="zh-CN",style="height:100%"> |
| <head> |
| <meta charset="utf-8"> |
| </head> |
| <body> |
| <div id="container" style="height:100%"></div> |
| |
| <script type="text/javascript" src="./echarts.min.js"></script> |
| <script> |
| var dom=document.getElementById('container'); |
| var myChart=echarts.init(dom,null,{ |
| renderer:'canvas', |
| useDirtyRect:false |
| }); |
| var app={}; |
| var option; |
| |
| option={ |
| title:{ |
| text:'gamma' |
| }, |
| tooltip:{ |
| trigger:'axis |
| }, |
| legend:{ |
| data:['1.9','2.5','测试值'] |
| }, |
| grid:{ |
| left:'3%', |
| right:'4%', |
| bottom:'3%', |
| containLabel:true, |
| }, |
| toolbox:{ |
| feature:{ |
| saveAsImage:{} |
| } |
| }, |
| xAxis:{ |
| type:'category', |
| boundaryGap:false, |
| data:[0,15,31,47,63] |
| }, |
| yAxis: [{ |
| type:'value', |
| min:function(value){ |
| return value.min; |
| }, |
| max:function(value){ |
| return value.max; |
| }, |
| }], |
| series:[ |
| { |
| name:'1.9', |
| type:'line', |
| data:[1,2,3,4,5,6,7,8] |
| }, |
| { |
| name:'2.2', |
| type:'line', |
| data:[2,3,4,5,6,7,8,9] |
| }, |
| { |
| name:'测试值', |
| type:'line', |
| data:[3,4,5,6,7,8,9,10] |
| } |
| ], |
| }; |
| if (option && typeof option === 'object'){ |
| myChart.setOption(option); |
| } |
| </script> |
| </body> |
| </html> |
| |
复制
QtDesigner绘制界面
htmlTest.py
| from PyQt5 import QtCore, QtWidgets |
| from PyQt5.QtCore import QUrl |
| from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEngineSettings |
| |
| |
| class Ui_Dialog(object): |
| def setupUi(self, Dialog): |
| Dialog.setObjectName('Dialog') |
| Dialog.resize(991, 650) |
| |
| self.horizontalLayout = QtWidgets.QHBoxLayout(Dialog) |
| self.horizontalLayout.setObjectName("horizontalLayout") |
| |
| |
| web_settings = QWebEngineSettings.globalSettings() |
| web_settings.setAttribute(QWebEngineSettings.JavascriptEnabled, True) |
| web_settings.setAttribute(QWebEngineSettings.PluginsEnabled, True) |
| web_settings.setAttribute(QWebEngineSettings.JavascriptCanOpenWindows, True) |
| |
| self.web_view = QWebEngineView() |
| self.web_view.load(QUrl("file:///绝对路径")) |
| |
| self.horizontalLayout.addWidget(self.web_view) |
| self.retranslateUi(Dialog) |
| QtCore.QMetaObject.connectSlotsByName(Dialog) |
| |
| def retranslateUi(self, Dialog): |
| _translate = QtCore.QCoreApplication.translate |
| Dialog.setWindowTitle(_translate('Dialog', 'Dialog')) |
| |
复制
展示图表
main.py
| import sys |
| from PyQt5 import QtWidgets |
| from PyQt5.QtWidgets import QDialog |
| from htmlTest import Ui_Dialog |
| |
| |
| class WebEngineWin(QDialog, Ui_Dialog): |
| |
| def __init__(self): |
| super().__init__() |
| self.setupUi(self) |
| |
| if __name__ == '__main__': |
| app = QtWidgets.QApplication(sys.argv) |
| win = WebEngineWin() |
| win.show() |
| sys.exit(app.exec_()) |
复制
动态修改图表数据
- html添加方法
| function setValue(val1,val2) { |
| option.series[0].data = val1 |
| option.series[1].data = val2 |
| myChart.setOption(option) |
| } |
复制
完整html代码
| <!DOCTYPE html> |
| <html lang="zh-CN",style="height:100%"> |
| <head> |
| <meta charset="utf-8"> |
| </head> |
| <body> |
| <div id="container" style="height:100%"></div> |
| |
| <script type="text/javascript" src="./echarts.min.js"></script> |
| <script> |
| var dom=document.getElementById('container'); |
| var myChart=echarts.init(dom,null,{ |
| renderer:'canvas', |
| useDirtyRect:false |
| }); |
| var app={}; |
| var option; |
| |
| option={ |
| title:{ |
| text:'gamma' |
| }, |
| tooltip:{ |
| trigger:'axis |
| }, |
| legend:{ |
| data:['1.9','2.5','测试值'] |
| }, |
| grid:{ |
| left:'3%', |
| right:'4%', |
| bottom:'3%', |
| containLabel:true, |
| }, |
| toolbox:{ |
| feature:{ |
| saveAsImage:{} |
| } |
| }, |
| xAxis:{ |
| type:'category', |
| boundaryGap:false, |
| data:[0,15,31,47,63] |
| }, |
| yAxis: [{ |
| type:'value', |
| min:function(value){ |
| return value.min; |
| }, |
| max:function(value){ |
| return value.max; |
| }, |
| }], |
| series:[ |
| { |
| name:'1.9', |
| type:'line', |
| data:[1,2,3,4,5,6,7,8] |
| }, |
| { |
| name:'2.2', |
| type:'line', |
| data:[2,3,4,5,6,7,8,9] |
| }, |
| { |
| name:'测试值', |
| type:'line', |
| data:[3,4,5,6,7,8,9,10] |
| } |
| ], |
| }; |
| if (option && typeof option === 'object'){ |
| myChart.setOption(option); |
| } |
| function setValue(val1,val2) { |
| option.series[0].data = val1 |
| option.series[1].data = val2 |
| myChart.setOption(option) |
| } |
| </script> |
| </body> |
| </html> |
| |
复制
- 修改main.py
| import sys |
| from PyQt5 import QtWidgets |
| from PyQt5.QtWidgets import QDialog |
| from htmlTest import Ui_Dialog |
| |
| |
| class WebEngineWin(QDialog, Ui_Dialog): |
| |
| def __init__(self): |
| super().__init__() |
| self.setupUi(self) |
| self.listener() |
| |
| def listener(self): |
| self.web_view.loadFinished.connect(self.set_table_data) |
| |
| def set_table_data(self): |
| js = "setValue({},{})".format([], []) |
| self.web_view.page().runJavaScript(js) |
| |
| |
| if __name__ == '__main__': |
| app = QtWidgets.QApplication(sys.argv) |
| win = WebEngineWin() |
| win.show() |
| sys.exit(app.exec_()) |
复制