2011-06-16 14 views
8

Ya encontré y edité en una respuesta a continuación.¿cómo devuelvo correctamente los valores de pyqt a JavaScript?

Quiero devolver los valores del código python al contexto javascript dentro de QtWebKit. Hasta el momento, tengo una clase como esta:

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) 

puedo llamar a esta función desde Javascript, así:

var a = extensions.constant_one(); 

y se pone hecho un llamamiento (I verificado con una impresión de allí); pero un still termina indefinido. ¿Por qué no se obtiene el valor devuelto por la función? También traté de envolver un QVariant, pero hasta ahora no he recibido ningún dado.

Editar: He encontrado la respuesta. Aparentemente, QtWebKit necesita el tipo de resultado como sugerencia. Uno puede proporcionar eso al pyqtSlot-Decorator, así:

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

y luego funciona correctamente. Dejando esto abierto por otros dos días, en caso de que alguien encuentre algo más que debería estar haciendo.

Respuesta

9

poco después de publicar la pregunta, encontré la respuesta yo mismo: Aparentemente, QtWebKit necesita el tipo de resultado como una pista. Uno puede proporcionar eso al pyqtSlot-Decorator, así:

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

y luego funciona correctamente.

+0

o para una cadena use '(result = str)' not '(result =" str ")' – iman

Cuestiones relacionadas