2017-03-17 4 views
0

J'utilise la bibliothèque plotly en mode déconnecté avec python et ce que j'essaie de faire est de créer un intrigue, les enregistrer en tant que html local et charger dans un second moment dans un QWebView.ouvrir l'intrigue dans qwebview en mode interactif

C'est le code pour une boxplot avec une variable fictive:

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() 

Je suis face à 2 problèmes principaux:

  1. si je laisse le code tel qu'il est, le won QWebView ne montre rien comme dans l'image: enter image description here

  2. si j'ouvre le fichier html avec le navigateur standard (Firefox par exemple), Je peux voir et interagir avec l'intrigue, et c'est bien. Mais si je sauve la page html à partir du navigateur dans un répertoire local et essayez de charger le fichier enregistré dans le QWebView je peux voir l'intrigue, mais ne peut pas interagir avec elle (peut-être pour certains Javascript manque ?!):

enter image description here

Tout le monde a des idées comment embed une ligne interactive fait graphique dans un QWebView?

Répondre

1

Ok, j'aurais dû trouver quel est le problème.

Il semble que QWebView a quelques difficultés à charger le fichier local car il est trop lourd (environ 2 Mo pour un tracé simple).

J'utilise l'option de ne pas comprennent le javascript lors de l'enregistrement du fichier local et de charger le javascript dans un second moment grâce, comme décrit here. En d'autres termes, créez les balises html initiales, incluez le résultat de la figure générée par plotly sans le code javascript entier, et incluez le lien du javascript.

De cette façon, le fichier est super léger et QWebView n'a pas de problème pour l'ouvrir.

# 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>'