【发布时间】:2014-04-01 16:30:36
【问题描述】:
我对 PyQt/它的 Webview 有疑问。困扰我的代码应该呈现图表,但事实并非如此。我正在使用 Highcharts 框架并为通过 Python 呈现图表的 javascript 函数提供数据。我还检查了 webview 是否准备好,因为这是我以前的错误。有问题的代码如下所示:
command = ('loadPinch(' + str(random.sample(range(10000), 1000)) +
', ' + str(['2009', '01', '01']) + ');')
self.webview.page().mainFrame().evaluateJavaScript("""
var readyStateCheckInterval = setInterval(function() {
if(document.readyState === 'complete'){ """ +
command + """
clearInterval(readyStateCheckInterval);
}
}, 10);""")
loadPinch 是一个 JavaScript 函数,看起来类似于此(又类似于 Highcharts 示例图):
function loadPinch(data, date){
$('#container').highcharts({
chart: {
zoomType: 'x',
spacingRight: 20
},
title: {text: 'Twitter Trends'},
subtitle: {
text: document.ontouchstart === undefined ?
'Click and drag in the plot area to zoom in' :
'Pinch the chart to zoom in'
},
xAxis: {
type: 'datetime',
maxZoom: 10 * 24 * 3600000,
title: {text: null}
},
yAxis: {
title: {text: 'Occurence'}
},
tooltip: {shared: true},
legend: {enabled: false},
plotOptions: {
area: {
fillColor: {
linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1},
stops: [
[0, Highcharts.getOptions().colors[0]],
[1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]
]
},
lineWidth: 1,
marker: {enabled: false},
shadow: false,
states: {hover: {lineWidth: 1}},
threshold: null
}
},
series: [{
type: 'area',
name: 'Twitter Trend',
pointInterval: 24 * 3600 * 1000,
pointStart: Date.UTC(date[0], date[1], date[2]),
data: data
}]
});
};
我可能会告诉你,如果我打印我正在将 evaluateJavaScript 交给控制台而不是执行它并将其粘贴到开发者控制台的命令,它会按预期执行并呈现图表,这让我相信那里是某种我无法追踪的比赛条件。
有人知道可能是什么问题吗?
问候, 卡森
注意:问题仍然存在。
【问题讨论】:
-
您在 JavaScript 控制台中是否有任何错误?你能用你的python代码在浏览器中发布生成的代码吗?
-
没有错误。但是,变量 readyStateCheckInterval 存在。生成的代码与此类似(虽然数据部分更长):pastebin.com/yZ9H6zfD
-
那么,evaluateJavaScript 看起来不像你期望的那样工作。不幸的是,我不是 webView 方面的专家,但是,您尝试过this 解决方案吗?
-
这是一个不同的evaluateJavascript函数(我的是qt,不是android)。我将从文档中读取一些信息。
-
经过几次尝试,我设法很容易地解决了这个问题。 qt 有一个 loadFinished 信号,我刚刚绑定到我的绘图方法。现在它就像一个魅力。好像在网站完全加载之前,你不能添加到 JavaScript 中。
标签: javascript python qt highcharts pyqt4