Я уже нашел и отредактировал ответ ниже.
Я хочу вернуть значения из кода Python в контекст javascript в QtWebKit. Пока у меня есть такой класс:
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;
и тогда работает корректно. Оставлю это открытым еще на два дня, на случай, если кто-то найдет что-то еще, чем мне следует заняться.
(result=str)
, а не(result="str")
16.10.2014