EDIT:PyQt QtWebKit - Возвращаемое значение из метода Python непосредственно JavaScript
Я нашел решение здесь: how do I correctly return values from pyqt to JavaScript?
я выложу код первого:
Python код:
class JSBridge(QObject):
def __init__(self, parent=None):
super(JSBridge, self).__init__(parent)
@pyqtSlot(bool)
def fromJStoPython(self, param):
print param
print param.toBool()
@pyqtSlot()
def returnValue()
return "hello world"
class another():
...
view = QWebView()
frame = view.page().mainFrame()
param = "blabla"
frame.evaluateJavaScript("printIt('" + param + "');")
paramBool = True
frame.evaluateJavaScript("fromPythonWithParameterBool('" + paramBool + "');")
JavaScript:
function printIt(param)
{
alert(param);
}
function toPython()
{
jsBridgeInst.fromJStoPython(true);
}
// now here functions I've questions about:
function fromPythonWithParameterBool(param)
{
alert(param);
}
function fromPythonReturnValue()
{
res = jsBridgeInst.returnValue();
alert(res);
}
Теперь мой вопрос:
printIt
функция работает отлично. Таким образом, параметр интерпретируется как строка. fromJStoPython
функция тоже хорошо работает. Оператор печати показывает, что это QVariant
.
Но функция fromPythonWithParameterBool
не работает, потому что мне нужно преобразовать paramBool
в строку, чтобы подключить ее. Если я это сделаю, он печатает строковое значение (но я хочу, чтобы оно было логическим). Можно ли передать логическое значение, так что в JavaScript я могу работать с ним как логическое? Если да, как вы это делаете?
И для функции fromPythonReturnValue
, она не показывает ошибку, но res
не определено. Зачем? Я искал для этой проблемы, но в основном примеры/уроки показывают стандартные вещи, как:
evaluateJavaScript("alert('9')";)
Я работал с Java и SWT, и я мог бы просто вернуть значение (как в методе formPythonReturnValue
). Был класс браузера, где вы могли бы реализовать свои методы для вызова, как JSBridge.
Thx за ответ: D Я проверил его сейчас также со списком в качестве параметра, и он прекрасно работает! – ProgrammingIsAwsome
Да, я знаю, поэтому я не удалял вопрос. Таким образом, практически невозможно передать все типы аргументов, которые оцениваются по типу JavaScript. Что приятно – ProgrammingIsAwsome
@ProgrammingIsAwsome. Извините: я ответил на ваш первый комментарий, прежде чем вы его отредактировали (иногда, похоже, немного отставание). – ekhumoro