Javascript Jupyter笔记本中的Google Colabs eval_js?

Javascript Jupyter笔记本中的Google Colabs eval_js?,javascript,python,jupyter-notebook,google-colaboratory,Javascript,Python,Jupyter Notebook,Google Colaboratory,有没有什么方法可以在Jupyter笔记本中获取google.colab.output.eval_js的行为?我有一段代码,它使用IPython.display让用户绘制图像。当按下按钮时,JS将图像的内容保存为data,然后我使用Python中的data=eval_JS(“data”)将该内容拉入Python。我试图在Jupyter笔记本上复制这种行为。我把完整的代码放在下面 从IPython.display导入HTML,图像 从google.colab.output导入eval_js can

有没有什么方法可以在Jupyter笔记本中获取
google.colab.output.eval_js
的行为?我有一段代码,它使用IPython.display让用户绘制图像。当按下按钮时,JS将图像的内容保存为
data
,然后我使用Python中的
data=eval_JS(“data”)
将该内容拉入Python。我试图在Jupyter笔记本上复制这种行为。我把完整的代码放在下面


从IPython.display导入HTML,图像
从google.colab.output导入eval_js
canvas_html=“”
猜数
var canvas=document.querySelector('canvas')
var ctx=canvas.getContext('2d')
ctx.lineWidth=%d
var button=document.querySelector('按钮')
变量鼠标={x:0,y:0}
canvas.addEventListener('mousemove',函数(e){
mouse.x=e.pageX-this.offsetLeft
mouse.y=e.pageY-this.offsetTop
})
canvas.onmousedown=()=>{
ctx.beginPath()
ctx.moveTo(mouse.x,mouse.y)
canvas.addEventListener('mousemove',onPaint)
}
canvas.onmouseup=()=>{
canvas.removeEventListener('mousemove',onPaint)
}
var onPaint=()=>{
ctx.lineTo(mouse.x,mouse.y)
ctx.stroke()
}
var数据=新承诺(解决=>{
button.onclick=()=>{
解析(canvas.toDataURL('image/png'))
}
})
"""
def draw(filename='drawing.png',w=280,h=280,线宽=20):
显示(HTML(画布HTML%(宽、高、线宽)))
数据=eval_js(“数据”)
#用python中的变量做某事。。。

选择
pip安装Js2Py

那么

从js2py import eval_js

from IPython.display import HTML, Image
from google.colab.output import eval_js

canvas_html = """
<canvas width=%d height=%d style="background-color:rgb(240,240,240)"=></canvas>
<button>Guess Number</button>
<script>
var canvas = document.querySelector('canvas')
var ctx = canvas.getContext('2d')
ctx.lineWidth = %d
var button = document.querySelector('button')
var mouse = {x: 0, y: 0}
canvas.addEventListener('mousemove', function(e) {
  mouse.x = e.pageX - this.offsetLeft
  mouse.y = e.pageY - this.offsetTop
})
canvas.onmousedown = ()=>{
  ctx.beginPath()
  ctx.moveTo(mouse.x, mouse.y)
  canvas.addEventListener('mousemove', onPaint)
}
canvas.onmouseup = ()=>{
  canvas.removeEventListener('mousemove', onPaint)
}
var onPaint = ()=>{
  ctx.lineTo(mouse.x, mouse.y)
  ctx.stroke()
}
var data = new Promise(resolve=>{
  button.onclick = ()=>{
    resolve(canvas.toDataURL('image/png'))
  }
})
</script>
"""

def draw(filename='drawing.png', w=280, h=280, line_width=20):
  display(HTML(canvas_html % (w, h, line_width)))
  data = eval_js("data")
  # do sth with the variable in python ...