2017-03-17 104 views
0

我在离线模式下使用plotly库与python和我想要做的是创建一些情节,将它们保存为本地HTML并在第二时间加载到QWebView中。以交互模式在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韩元不会显示图像中的任何内容: enter image description here

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

enter image description here

任何人有一些想法如何嵌入制成图表为QWebView一个互动下线?

回答

1

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

似乎QWebView加载本地文件有一些困难,因为它太重(对于简单的情节大约2mb)。

所以我用的选项包括javascript保存时的本地文件,加载第二时刻感谢在javascript,如上所述here

换句话说,创建初始html标签,包含由没有整个javascript代码的plotly生成的图形的结果,并包括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>'