PyQt-QtWebKit-将值从Python方法直接返回到JavaScript
编辑: 我在这里找到了一个解决方案: 我将首先发布代码: Python代码: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
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'