您可以在matplotlib窗口而不是浏览器中呈现和显示HTML吗?

时间:2019-03-15 14:42:07

标签: python html matplotlib

我有一个程序,可以生成绘图并使用matplotlib将其显示给用户。我现在要添加一个功能,该功能涉及从某些数据生成并经过修改的HTML。我可以使用webbrowser.open('file://' + htmlFilePath, new=2, autoraise=False)显示修改后的HTML,它将在默认浏览器或为Webbrowser配置的任何浏览器中打开。

但是我真的很想在运行的matplotlib窗口中显示此html,而不是打开单独的浏览器窗口。有什么方法可以将此HTML显示到matplotlib窗口?作为呈现的HTML或什至只是浏览器将呈现的HTML页面的图片。

我没有太多尝试的代码,因为有关stackoverflow的大部分研究都向我展示了如何将matplotlib图显示为flask / django的html,这意味着PLOT到HTML而不是HTML到PLOT 。我不需要将绘图转换为HTML,我需要将HTML转换为某种图像或numpy数组或类似的东西,以便可以像ax.imshow(htmlFilePath)一样显示它。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以在同一GUI窗口中彼此相邻显示一个Web浏览器和matplotlib图形。

例如,使用PyQt5,以下操作将创建一个窗口,并将webbroser放置在左侧,并将matplotlib图形放置在右侧。

import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5 import QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvas, NavigationToolbar2QT
from matplotlib.figure import Figure

class ApplicationWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self._main = QtWidgets.QWidget()
        self.setCentralWidget(self._main)
        layout = QtWidgets.QHBoxLayout(self._main)

        self.web = QWebEngineView()

        self.fig = Figure(figsize=(5, 3))
        self.canvas = FigureCanvas(self.fig)

        layout.addWidget(self.web)
        layout.addWidget(self.canvas)
        self.addToolBar(NavigationToolbar2QT(self.canvas, self))

        self.fill_content("<html><div>Some Html</div></html>", [1,3,2])

    def fill_content(self, html, data):
        self.web.setHtml(html)

        self.fig.clear()
        ax = self.fig.add_subplot(111)
        ax.plot(data)
        self.canvas.draw_idle()


if __name__ == "__main__":
    qapp = QtWidgets.QApplication(sys.argv)
    app = ApplicationWindow()
    app.show()
    qapp.exec_()

enter image description here