以交互模式在 qwebview 中打开 plotly

open plotly in qwebview in interactive mode

我在 python 的离线模式下使用 plotly 库,我想做的是创建一些情节,将它们保存为本地 html 并加载进入 QWebView 的第二个时刻。

这是带有虚拟变量的箱线图的代码:

from PyQt5.QtWebKitWidgets import QWebView
import plotly
import plotly.graph_objs as go

x1 = [10, 3, 4, 5, 20, 4, 3]

trace1 = go.Box(
x = x1)

layout = go.Layout(
    showlegend = True
)


data = [trace1]
fig = go.Figure(data=data, layout = layout)

fn = '/home/matteo/plot.html'
plotly.offline.plot(fig, filename = fn, 
auto_open = False)

view = QWebView()
view.load(QUrl.fromLocalFile(fn))
view.show()

我面临两个主要问题:

  1. 如果我让代码保持原样,QWebView 将不会显示图像中的任何内容:

  2. 如果我用标准浏览器(例如 Firefox)打开 html 文件,我可以看到情节并与之互动,这很好。但是,如果我将 html 页面从浏览器保存在本地目录中,并尝试将保存的文件加载到 QWebView 中,我可以看到该图,但无法与之交互(可能对于某些 Javascript不见了?!):

有人知道如何将交互式离线图表嵌入到 QWebView 中吗?

好的,我应该找到问题所在了。

似乎QWebView加载本地文件有一些困难,因为它太重了(简单绘图大约2mb)。

所以我在保存本地文件时使用了 包含 javascript 的选项,并在一秒钟内加载 javascript 谢谢,因为描述 here.

换句话说,创建初始的html标签,包括plotly生成的图形的结果而没有整个javascript代码,并包括link的javascript。

以这种方式文件非常轻,QWebView打开它没有问题。

# create the initial html code
raw_html = '<head><meta charset="utf-8" /></head>''<head><meta charset="utf-8" /><script src="https://cdn.plot.ly/plotly-latest.min.js"></script></head>'

# call the plot method without all the javascript code
raw_html += plotly.offline.plot(fig, filename = fn, include_plotlyjs=False)

# close the body and html tags
raw_html += '</body></html>'