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

时间:2011-06-16 13:04:22

标签: 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)

我可以通过Javascript调用此函数,如下所示:

var a = extensions.constant_one();

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

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

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

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

1 个答案:

答案 0 :(得分:10)

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

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

然后它正常工作。