PyScript 使用 Pyodide 在 JavaScript 和 Python 之间转换对象。这种交叉调用需要 JS 范围内的 Python 函数的代理。所以,如果你创建了 Python 函数的代理,你可以在 JS 的事件监听器中将此代理设置为回调。见https://pyodide.org/en/stable/usage/type-conversions.html#call-js-from-py
好吧,您不能设置任意参数以在 JS 事件中传递。但是,调用 Python 的主要目的是处理一些事件,不是吗?例如。单击按钮时,您想在 Python 中执行某些操作。如果是这样,事件处理程序(您的 Python 函数通过代理)获取 PointerEvent。它的 currentTarget 属性告诉你点击的 DOM 元素。通过元素的属性,您实际上可以传递您想要的任何数据。
<py-script>
import pyodide
import js
class myClass():
def __init__(self):
self.add_one_proxy = pyodide.create_proxy(self.add_one)
js.document.getElementById('mybutton').addEventListener("click", self.add_one_proxy)
def add_one(self, pointerEventObj):
"""Callback from JS when a button is clicked"""
btn_elem = pointerEventObj.currentTarget
data = btn_elem.getAttribute('data')
js.document.getElementById('resultdiv').innerHTML = str(int(data)+1)
def shutdown(self):
self.add_one_proxy.destroy()
klass = myClass()
# Make sure in the program to keep holding a reference of klass ...
# do the whole program here
# When all done, call klass.shutdown()
</py-script>
<body>
<button id="mybutton" data="12" />
<div id="resultdiv">calculated data will come here on button click</div>
</body>