PyQt-QtWebKit-将值从Python方法直接返回到JavaScript

PyQt-QtWebKit-将值从Python方法直接返回到JavaScript,javascript,python,pyqt4,qtwebkit,method-signature,Javascript,Python,Pyqt4,Qtwebkit,Method Signature,编辑: 我在这里找到了一个解决方案: 我将首先发布代码: Python代码: class JSBridge(QObject): def __init__(self, parent=None): super(JSBridge, self).__init__(parent) @pyqtSlot(bool) def fromJStoPython(self, param): print param print param.toB

编辑:

我在这里找到了一个解决方案:

我将首先发布代码:

Python代码:

class JSBridge(QObject):
    def __init__(self, parent=None):
        super(JSBridge, self).__init__(parent)

    @pyqtSlot(bool)
    def fromJStoPython(self, param):
        print param
        print param.toBool()
    @pyqtSlot()
    def returnValue()
        return "hello world"

class another():
    ...
    view = QWebView()
    frame = view.page().mainFrame()

    param = "blabla"
    frame.evaluateJavaScript("printIt('" + param + "');")
    paramBool = True
    frame.evaluateJavaScript("fromPythonWithParameterBool('" + paramBool + "');")
JavaScript:

函数printItparam { alertparam; } 托皮顿函数 { jsBridgeInst.fromJStoPythontrue; } //现在,我有一些关于函数的问题: 来自PythonWithParameterBoolparam的函数 { alertparam; } 函数fromPythonReturnValue { res=jsBridgeInst.returnValue; 警报; } 现在我的问题是:

printIt函数工作正常。因此,参数被解释为字符串。 fromJStoPython函数也可以正常工作。print语句显示它是一个QVariant

但是fromPythonWithParameterBool函数不起作用,因为我必须将paramBool转换为字符串才能连接它。如果我这样做,它将打印字符串值,但我希望它是布尔值。是否可以传递布尔值,以便在JavaScript中可以将其作为布尔值使用?如果是,你是怎么做的

对于fromPythonReturnValue函数,它不显示错误,但res未定义。为什么? 我一直在寻找这个问题,但大多数示例/教程都显示了以下标准内容:

evaluateJavaScript("alert('9')";)
我使用过Java和SWT,在那里我可以简单地返回一个值,如formPythonReturnValue方法中所示。有一个浏览器类,您可以在其中实现要调用的方法,就像JSBridge一样。

fromPythonWithParameterBool不起作用,因为您没有生成可以作为javascript计算的输入字符串

您需要做的是这样的事情:

>>>脚本='fromPythonWithParameterBool%s;'%strboolparamBool.lower >>>打印脚本 来自python,参数为booltrue; 因此,结果字符串现在是有效javascript的一个片段

正如您已经发现的那样,fromPythonReturnValue的问题在于您没有指定返回值的类型。这必须使用以下方法明确完成:


Thx回复:我现在已经用一个列表作为参数对它进行了测试,它工作得非常好!是的,我知道,这就是为什么我没有删除这个问题。因此,实际上可以将所有类型的求值参数传递给JavaScript类型。那是nice@ProgrammingIsAwsome. 抱歉:我是在你编辑之前回复你的第一条评论的,有时候似乎有点滞后。
    @pyqtSlot(result=str)
    def returnValue(self):
        return 'hello world'