Возрождая это, так как мы сталкиваемся с той же проблемой и собираемся масштабировать вещи от одного представления / виджета до всего приложения.
Я просто установил для базового URL-адреса что-то, где я работаю со статическим контентом, и из файла QRC это просто:
html = jinjatemplate.render(...)
self._mainFrame.setHtml(html.decode('utf-8'), Qt.QUrl('qrc:///Orsync/html/'))
Для общения наш HTML использует AJAX поверх jQuery для большинства вещей. Вы могли бы обернуть это в слой, который или $.post(...)
или api.post(...)
выглядит так:
self._mainFrame.addToJavaScriptWindowObject('api', self._webapi)
Вам нужно будет самостоятельно декодировать URL и создать объект запроса, но, может быть, это не так сложно сделать? В настоящее время мы используем очень мало URL-адресов (которые отображаются непосредственно на объекты / функции Python), поэтому сопоставление легко выполнить самостоятельно.
Данные, которые возвращаются, просто отправляются с использованием QMainFrame.evaluateJavaScript(...)
, либо в виде прямого вызова Qt, либо в виде набора строк кода, извлекаемых с использованием $.getScript(...)
(который просто оценивает полученный код).
В настоящее время я немного перестраиваю вещи с помощью CherryPy, и он сразу отображает URL -> объекты Python, так что я надеюсь, что это что-то даст.
В противном случае, я хотел бы, чтобы кто-то мог запускать QWebKit по именованным каналам или что-то подобное локализованно, а не по tcp-сокету. :)