javascript - PyQt 中的评估JavaScript - 未调用函数

标签 javascript python qt highcharts pyqt4

我的 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
        }]
    });
};

我可能会告诉你,如果我打印将评估JavaScript交给控制台的命令,而不是执行它并将其粘贴到开发人员控制台,它会按预期执行并呈现图表,这让我相信有是某种我无法追踪的竞争条件。

有人知道可能出现什么问题吗?

问候, 卡森

注意:问题仍然相关。

最佳答案

我最终找到了解决办法;我在 JS 方面想得太多了。

QT 中有一个信号,当页面加载完成时会发出,称为 loadFinished()。通过将此信号绑定(bind)到我的一个执行 evaluateJavascript(command) 调用的插槽,图表就会加载。当页面尚未完成加载时,Qts webview 似乎无法执行 Javascript。

无论如何,这就是代码的样子(简化):

class something():
    def __init__(self):
        self.webview = QtWebkitWidgets.QWebView()
        self._myBindingFunction()

    def _myBindingFunction(self):
        self.webview.loadFinished.connect(self._plot)

    def _plot(self):
        command = ('loadPinch(' + str(random.sample(range(10000), 1000)) +
                   ', ' + str(['2009', '01', '01']) + ');')
        self.webview.page().mainFrame().evaluateJavaScript(command)

注意这如何简化了 JS 代码;我不必检查站点是否已加载,因为发出信号后,它必须准备好。

强烈感谢Pawel Fus但引导我走上正确的道路。我已经放弃了。

关于javascript - PyQt 中的评估JavaScript - 未调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22791655/

相关文章:

c++ - ezpwd reed-solomon纠错库使用方法

windows - 使用依赖 DLL 在 Windows 7 上运行 32 位应用程序

javascript - 命令栏菜单消失 CRM

javascript - 在 URL 查询更改后 react 如何呈现页面

javascript - 没有最后一个元素的表追加

javascript - 使用 Azure 媒体服务直播单个/静态音频文件

python - 我的 Flask python 应用程序需要进行哪些更改才能使用 MySQL 数据库?

关于索引超出范围的 Python 问题

javascript - 使用 python 抓取动态加载的网站

c++ - Qt中不能同时绘制多个对象吗?