2011-06-16 54 views
8

我已经在下面的答案中找到并编辑了。如何正确地将pyqt的值返回给JavaScript?

我想从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(); 

和它得到的确实叫(我用打印在那里验证);但仍然没有定义。为什么没有得到从函数返回的值?我也尝试在QVariant中包装一个,但迄今为止没有骰子。

编辑:我找到了答案。显然,QtWebKit需要结果类型作为提示。可以这样提供给pyqtSlot-Decorator,像这样:

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

然后它工作正常。如果有人发现别的东西,我应该再做两天。

回答

9

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

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

然后它工作正常。

+0

或者用于字符串使用'(result = str)'not'(result =“str”)' – iman 2014-10-16 09:04:35

相关问题