2017-03-17 33 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>'