Я использовал несколько обходных путей для достижения этого в этом проекте . Конкретно я посылаю сигналы в iframe для запуска некоторых событий js и запуска методов python. Я надеюсь, что в будущем bokeh разрешит некоторые вызовы RPC. Ключевые файлы для получения функциональности:
- Я загружаю bokeh в iframe, чтобы контролировать все приложение от электрона.
Я посылаю сигнал в iframe с помощью этим методом .
document.getElementById('bokeh_iframe').contentWindow.postMessage({
"signal": "call-python-promise",
"message_data": message
} , '*'); // to index.html, the click on the button is run there as well
Один пример вызова здесь . Вы можете разместить эти вызовы в пунктах электронного меню (на стороне рендера ipc).
var call_params = {
'object': 'bokeh.loader',
'method': 'init_bokeh',
'args': {
'ts_state': $('body').data('ts_state'),
}
}
tools.call_promise(call_params).then((result) => {
self.run_on_ready();
});
Этот объект создает механизм для запуска обратных вызовов от js. Небольшая форма боке, построенная с помощью кнопки, ввода текста и графика.
- Здесь Я заполняю фиктивный текстовый объект, чтобы выбрать метод для вызова (объект и метод). Затем я запускаю метод python (обратный вызов, связанный с кнопкой) с
button.click()
- Объект и метод принимаются и вычисляются на стороне питона. Наконец, метод bokeh возвращает ответ электрону с обратным процессом, как я показал здесь .
Как видите, это довольно громоздко. Если вы найдете лучший способ сделать это, дайте мне знать. В будущем будет создан некоторый способ вызова методов python, и все это будет проще.
Примечание : Вам может понадобиться проверить, когда загружается bokeh, чтобы перенаправить электрон. Отметьте вопрос и ответ