在pyside中显示pyecharts图形
import sys
from PySide2.QtWidgets import *
from PySide2.QtGui import *
from PySide2.QtCore import QDate, QObject, Signal, Slot
from PySide2.QtWebEngineWidgets import QWebEngineView
from pyecharts.charts import Bar
from pyecharts.faker import Faker
import pyecharts.options as opts
from share import SI
class stats(QWidget):
def __init__(self):
super(stats, self).__init__()
self.initUI()
def initUI(self): # 绘图pyecharts
self.setWindowTitle("示例1")
self.setGeometry(100, 100, 1240, 800)
layout = QVBoxLayout()
self.bro = QWebEngineView()
self.bro.setFixedWidth(self.width())
self.bro.setFixedHeight(self.height())
self.button = QPushButton('绘图')
self.button2 = QPushButton('保存')
layout1 = QHBoxLayout()
layout1.addWidget(self.button)
layout1.addWidget(self.button2)
layout.addLayout(layout1)
layout.addWidget(self.bro)
self.setLayout(layout)
self.button.clicked.connect(self.huitu)
self.button2.clicked.connect(self.huitu)
self.button2.setEnabled(False)
def huitu(self, cs):
if self.sender().text() != '保存':
# print(self.sender().text())
wd = str(int(self.bro.width())*0.95) + 'px'
gd = str(int(self.bro.height()*0.95)) + 'px'
c = Bar({"width": wd, "height": gd, 'renderer': 'svg'})
c.add_xaxis(Faker.days_attrs).add_yaxis(
"WTI", Faker.days_values).set_global_opts(
title_opts=opts.TitleOpts(title="Bar-DataZoom(slider-水平)"),
datazoom_opts=opts.DataZoomOpts(), )
c.set_global_opts(
toolbox_opts=opts.ToolboxOpts(is_show=True, orient="vertical", pos_left="95%",
feature=opts.ToolBoxFeatureOpts(
save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(type_="jpeg", title="保存为jpeg", pixel_ratio=2))),
title_opts=opts.TitleOpts(title="国际原油期货行情",
title_textstyle_opts=opts.TextStyleOpts(font_family='Times New Roman', font_size=20)),
legend_opts=opts.LegendOpts(is_show=True,
textstyle_opts=opts.TextStyleOpts(font_family='Times New Roman', font_size=18)),
datazoom_opts=opts.DataZoomOpts(is_show=True, range_start=0, range_end=100),
xaxis_opts=opts.AxisOpts(name="日期", offset=20, axislabel_opts=opts.LabelOpts(font_size=14, rotate=-15)),
yaxis_opts=opts.AxisOpts(type_="value", name="美元/桶", offset=10, min_='dataMin', max_='dataMax',
splitline_opts=opts.SplitLineOpts(is_show=True),
axislabel_opts=opts.LabelOpts(font_size=14, distance=15)),
tooltip_opts=opts.TooltipOpts(trigger="axis", trigger_on='mousemove', axis_pointer_type="cross", ))
self.bro.setHtml(c.render_embed())
self.button2.setEnabled(True)
SI.curPict = c
else:
pathandfilename = sys.argv
pathandfilename = pathandfilename[0][::-1].split('/', 1)[1][::-1] + '/' +'图形导出_' + str(
QDate.currentDate().toString('yyyy_MM_dd')) + '.html'
try:
SI.curPict.render(pathandfilename)
except:
QMessageBox.warning(None, "提示框", " 未导出成功! 你欲导出的文件 " + pathandfilename + '是否已经打开?')
finally:
QMessageBox.information(None, "提示框", " 导出成功! 你导出的文件名是: " + pathandfilename)
def main(self):
app = QApplication(sys.argv)
main = self()
main.show()
exit(app.exec_())
if __name__ == "__main__":
main(stats)