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

Posted

技术标签:

【中文标题】如何正确地将值从 pyqt 返回到 JavaScript?【英文标题】:how do I correctly return values from pyqt to JavaScript? 【发布时间】:2011-06-16 13:04:22 【问题描述】:

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

我想将 python 代码中的值返回到 QtWebKit 中的 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();

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

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

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

然后它就可以正常工作了。再把它打开两天,以防有人发现我应该做的其他事情。

【问题讨论】:

【参考方案1】:

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

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

然后它就可以正常工作了。

【讨论】:

或字符串使用(result=str) 而不是(result="str")

以上是关于如何正确地将值从 pyqt 返回到 JavaScript?的主要内容,如果未能解决你的问题,请参考以下文章

有效地将值从一列替换到另一列 Pandas DataFrame

如何将值从主传递到对话框

PyQt:如何将选择的 Combobox 值从 QDialog 传递到主窗口?

如何将值从 InAppBrowser 返回到 Ionic 应用程序

如何将值从节点返回到原点(angular2 请求)

将值从 SQL Server 返回到 VB.Net