在pyside中显示pyecharts图形

发布时间 2023-07-12 16:36:36作者: 宏图英雄

在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)