我正在玩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键盘上按下一个音符时,我得到了:
我不知道该怎么做这个错误,而且我一点也不确定这种方法是否合理。
答案 0 :(得分:4)
这已经是一年了,所以我猜你很久以前就已经解决了这个问题,但是原则上你的方法是正确的,我做同样的事情,当你用window.js_func = py_func映射它时它会起作用。以下是我目前使用的代码中的一些相关内容,适用于chrome / firefox:
var gm = require('gm');
var image = random() + '.png';
var pathToFile = path.join(__dirname, req.files[i].path)
, pathToSnapshot = path.join(__dirname, '/uploads/document_thumb/' + image);
gm(pathToFile).thumb(150, // Width
150, // Height
pathToSnapshot, // Output file name
40, // Quality from 0 to 100
function (error, stdout, stderr, command) {
if (!error) {
console.log(command);
}
else {
console.log(error);
}
});
有用的东西是,如果你使用window.console.log(事件),你将把事件作为一个对象,你可以从开发工具中探索。另一方面,打印将其展平为纯文本。
一个更大的问题可能是使用Brython找出某些类型的错误的原因是非常棘手的(尽管对Brython都很尊重,但它很棒并且工作得非常好。)
使得更容易找到像这样的问题的底层的一件事是源映射。我最近将一个个人项目从Brython转移到了Transcrypt,发现Transcrypt的sourcemap支持有助于隔离错误原因。这么多,所以我没有尝试逐步进行,但只是大胆地编译python源并逐个跟踪错误,直到一切正常(python部分大约是2700行)。对我来说,在另一个方向上这是不可能的,但可能不适合那些了解Brython内部人员的人。