从 JavaScript 调用 Brython 函数
Invoke Brython function from JavaScript
我正在玩 Brython。
我正在尝试找出如何从 JavaScript 执行 Brython 代码。
http://www.brython.info/static_doc/en/jsobjects.html <-- 这看起来像相关文档页面,但似乎缺少从 JavaScript.
调用 Brython 函数的示例
针对我的具体情况,我正在收听 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>
但是当我在 MIDI 键盘上按下一个音符时,我得到:
我不知道这个错误是怎么回事,我也不确定这个方法是否合理。
已经一年了,所以我想你很久以前就解决了这个问题,但是你的方法原则上是正确的,我也这样做,当你像 [=20 那样映射它时它就起作用了=] = 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(event),您将把事件作为一个对象返回,您可以从开发工具中探索该对象。另一方面,打印将其展平为纯文本。
一个更大的问题可能是使用 Brython 找出某些类型的错误的原因可能非常棘手(尽管对 Brython 来说,它很棒并且工作得很好)。
资源映射可以更轻松地查明此类问题的根源。我最近将一个个人项目从 Brython 转移到 Transcrypt,发现 Transcrypt 的源映射支持对隔离错误原因有很大帮助。如此之多以至于我没有尝试逐步进行,而是大胆地编译了 python 源代码并逐一跟踪错误,直到一切正常(python 部分大约有 2700 行)。在另一个方向上,这对我来说是不可能的,但对于了解 Brython 内部结构的人来说可能不是。
我正在玩 Brython。
我正在尝试找出如何从 JavaScript 执行 Brython 代码。
http://www.brython.info/static_doc/en/jsobjects.html <-- 这看起来像相关文档页面,但似乎缺少从 JavaScript.
调用 Brython 函数的示例针对我的具体情况,我正在收听 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>
但是当我在 MIDI 键盘上按下一个音符时,我得到:
我不知道这个错误是怎么回事,我也不确定这个方法是否合理。
已经一年了,所以我想你很久以前就解决了这个问题,但是你的方法原则上是正确的,我也这样做,当你像 [=20 那样映射它时它就起作用了=] = 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(event),您将把事件作为一个对象返回,您可以从开发工具中探索该对象。另一方面,打印将其展平为纯文本。
一个更大的问题可能是使用 Brython 找出某些类型的错误的原因可能非常棘手(尽管对 Brython 来说,它很棒并且工作得很好)。
资源映射可以更轻松地查明此类问题的根源。我最近将一个个人项目从 Brython 转移到 Transcrypt,发现 Transcrypt 的源映射支持对隔离错误原因有很大帮助。如此之多以至于我没有尝试逐步进行,而是大胆地编译了 python 源代码并逐一跟踪错误,直到一切正常(python 部分大约有 2700 行)。在另一个方向上,这对我来说是不可能的,但对于了解 Brython 内部结构的人来说可能不是。