2011-06-16 56 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

相關問題