Вызов функции Brython из JavaScript

РЕДАКТИРОВАТЬ: сообщение группы Google

Я играю с Brython.

Я пытаюсь выяснить, как выполнить код Brython из JavaScript.

http://www.brython.info/static_doc/en/jsobjects.html <- это похоже на соответствующую страницу документации, но, похоже, отсутствует пример вызова функции Brython из JavaScript.

Для моей конкретной ситуации я слушаю события MIDI (используя https://github.com/cwilso/WebMIDIAPIShim)

Я хочу, чтобы код Brython выполнялся в ответ на полученное событие MIDI.

В настоящее время я пытаюсь:

function myMIDIMessagehandler( event ) 
{
    if( brythonListener != null )
        brythonListener( event );

и код Brython:

<script type="text/python3">

from browser import document as doc, window, html

def foo(event):
    print("BRYTHON!" + event);

window.brythonListener = foo

</script>

Но когда я нажимаю заметку на своей миди-клавиатуре, я получаю:

введите описание изображения здесь

Я не знаю, что делать с этой ошибкой, и я совсем не уверен, что подход обоснован.

1 ответ

Решение

Это был год, так что я думаю, что вы решили это давно, но, несмотря на это, ваш метод в принципе правильный, я делаю то же самое, и он работает, когда вы сопоставили его, как вы сделали с window.js_func = py_func. Вот некоторые полезные биты из кода, который я сейчас использую, который работает на chromium / firefox:

<!-- Bottom of HTML.. -->
<script type="text/javascript">
var jv_funcs = {
    openfile:function(iptElement, fileType){
        // some file opening code then a call back to python
        open_file(reader.result, fileType);
    }
};
</script>
<script type="text/python3" src="src/pythonscript.py"></script>


# separate python script in my case 'pythonscript.py'
def open_file(fileContent, fileType):
    # show the file in the dom..

def open_clicked():
    window.jv_funcs.openfile(document["idOpen"], "fileType")


window.open_file = open_file
document["btnOpen"].bind("click", open_clicked)

Полезно знать, что если вы используете window.console.log (событие), вы получите событие обратно как объект, который вы можете исследовать с помощью инструментов dev. С другой стороны, печать сглаживает текст.

Более серьезная проблема может заключаться в том, что может быть довольно сложно выяснить причину некоторых типов ошибок при использовании Brython (хотя все это относится к Brython, хотя это удивительно и работает очень хорошо).

Одна вещь, которая облегчает понимание таких проблем, как сопоставление исходных кодов. Недавно я переместил личный проект из Brython в Transcrypt и обнаружил, что поддержка исходных карт Transcrypt очень помогает выявить причины ошибок. Настолько, что я не пытался делать это постепенно, а просто смело компилировал исходный код python и следил за ошибками один за другим, пока все не заработало (часть python составляет около 2700 строк). Это было бы невозможно для меня в другом направлении, но, вероятно, не для кого-то со знанием внутренних органов Brython.

Другие вопросы по тегам