我有一个程序,可以生成绘图并使用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)
一样显示它。谢谢。
答案 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_()