javascript - 从 JavaScript 调用 Brython 函数

标签 javascript python-3.x brython

编辑:Google Group post

我正在玩 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 键盘上按下一个音符时,我得到:

enter image description here

我不知道这个错误是怎么回事,我也不确定这个方法是否合理。

最佳答案

已经一年了,所以我想你很久以前就解决了这个问题,但是你的方法原则上是正确的,我也这样做,当你像使用 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(event),您将把事件作为一个对象返回,您可以从开发工具中探索该对象。另一方面,打印将其展平为纯文本。

一个更大的问题可能是使用 Brython 找出某些类型的错误的原因可能非常棘手(尽管对 Brython 来说,它非常棒并且工作得很好)。

源映射可以更轻松地查明此类问题的根源。我最近将个人项目从 Brython 转移到 Transcrypt并发现 Transcrypt 的 sourcemap 支持对隔离错误原因有很大帮助。以至于我没有尝试增量地做,而是大胆地编译了python源码,然后一个一个地跟进错误,直到一切正常(python部分大约2700行)。从另一个方向来看,这对我来说是不可能的,但对于了解 Brython 内部结构的人来说可能不是。

关于javascript - 从 JavaScript 调用 Brython 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797867/

相关文章:

python - 重复数组并在特定位置停止 w/numpy

python - ** 或 pow() 不支持的操作数类型 : 'Entry' and 'int' ?

javascript - -webkit-溢出-滚动 : touch causes jQuery dynamic changes to not show?

JavaScript:带有函数数组的TypeError

javascript - 获取当前表行的值

python-3.x - 查找从python中的点列表创建的两条线的交点

python - Brython:每 [...] 微秒移动元素

javascript - 如何在 brython 中绘制 Canvas ?

javascript - 我可以使用 brython 开发 Chrome 扩展吗?

php - AJAX 即时通讯