Как правильно вернуть значения из PyQT в JavaScript? - PullRequest
9 голосов
/ 16 июня 2011

Я уже нашел и отредактировал ответ ниже.

Я хочу вернуть значения из кода 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();

, и она действительно вызывается (я проверял с помощью printтам);но все равно остается неопределенным.Почему не получить значение, возвращаемое из функции?Я также попытался обернуть a в QVariant, но пока без кубиков.

Редактировать: я нашел ответ. По-видимому, QtWebKit нужен тип результата в качестве подсказки.Это можно передать pyqtSlot-Decorator следующим образом:

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

, и тогда он будет работать правильно.Оставлю это открытым еще на два дня, на случай, если кто-то найдет что-то еще, что я должен делать.

1 Ответ

10 голосов
/ 17 июня 2011

вскоре после публикации вопроса я сам нашел ответ: по-видимому, QtWebKit нужен тип результата как подсказка.Это можно передать pyqtSlot-Decorator следующим образом:

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

, и тогда он будет работать правильно.

...