未调用PyQt函数中的evaluateJavaScript

2024-09-30 05:30:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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示例图):

^{pr2}$

我可能会告诉您,如果我打印将evaluateJavaScript传递给控制台的命令,而不是执行它并将其粘贴到开发人员控制台,它将按预期执行并呈现图表,这使我相信存在某种我无法跟踪的争用条件。在

有人知道问题出在哪里吗?在

谨致问候, 卡森

注意:问题仍然相关。在


Tags: 函数代码框架图表javascripthighchartscommandpyqt
1条回答
网友
1楼 · 发布于 2024-09-30 05:30:28

我最终找到了我的解决方案;我在JS术语中想得太多了。在

QT中有一个在页面加载完成时发出的信号,称为loadFinished()。通过将这个信号绑定到我的一个执行evaluateJavascript(command)调用的插槽,图表就加载了。似乎qtswebview在页面还没有完成加载时执行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代码的;我不必检查站点是否已加载,因为在发出信号后,它必须准备就绪。在

尽管如此,我还是对他大加赞赏,因为他把我带到了正确的轨道上。我已经放弃了。在

相关问题 更多 >

    热门问题