如何正确地将值从pyqt返回到JavaScript?

CON*_*GHT 9 qt pyqt qtwebkit

我已经在下面的答案中找到并编辑了.

我想在QtWebKit中将值从python代码返回到javascript上下文.到目前为止,我有一个这样的课程:

class Extensions(QtCore.QObject):
  @QtCore.pyqtSlot()
  def constant_one(self):
    return 1;
# ... later, in code
e = Extensions();
def addextensions():
  webview.page().mainFrame().addToJavaScriptWindowObject("extensions", e);
# ... 
webview.connect(webview.page().mainFrame(), QtCore.SIGNAL("javaScriptWindowObjectCleared"), addextensions)
Run Code Online (Sandbox Code Playgroud)

我可以从Javascript中调用此函数,如下所示:

var a = extensions.constant_one();
Run Code Online (Sandbox Code Playgroud)

它确实被称为(我在那里用印刷品验证过); 但仍然最终未定义.为什么不从函数返回值?我也试过在QVariant中包装一个,但到目前为止还没有骰子.

编辑:我找到了答案.显然,QtWebKit需要结果类型作为提示.可以将它提供给pyqtSlot-Decorator,如下所示:

class Extensions(QtCore.QObject):
  @QtCore.pyqtSlot(result="int")
  def constant_one(self):
    return 1;
Run Code Online (Sandbox Code Playgroud)

然后它正常工作.让这个开放另外两天,以防有人发现我应该做的其他事情.

CON*_*GHT 10

在发布问题后不久,我自己找到了答案:显然,QtWebKit需要结果类型作为提示.可以将它提供给pyqtSlot-Decorator,如下所示:

class Extensions(QtCore.QObject):
  @QtCore.pyqtSlot(result="int") # just int (type object) also works
  def constant_one(self):
    return 1;
Run Code Online (Sandbox Code Playgroud)

然后它正常工作.