Python eval kernel¶
依赖¶
- 安装CodeLab Adapter
- 安装Chrome 浏览器
- 目前 Scratch 官方团队在陆续支持更多浏览器版本,现阶段使用 Firefox/Chrome 浏览器效果最佳.
- 建议将其设为默认浏览器.
步骤 1:打开 Codelab Adapter¶
双击打开 Codelab Adapter。
Codelab Adapter 启动之后,将打开默认浏览器。
步骤 2:打开 Codelab Scratch3¶
点击 Web UI 上的scratch3
链接, 或者点击这儿, 将打开如下页面:
图中箭头所指的小圆点呈现绿色 说明 Codelab Adapter 与 Scratch3.0 的连接正常
步骤 3:hello world¶
选择对应的 Scratch3 插件:Python 插件
在 Scratch Python 插件里使用 插件启停积木 启动 CodeLab Adapter Python 插件。
执行 Python 代码:
Python 插件将以 eval 执行 Python 代码(只能执行表达式),如果你想使用 exec ,文末有指导。
你可以在插件中添加新的类,来自定义新功能, 我们做了一个范例: PyHelper 源码。你可以使用 PyHelper.open_url("https://www.codelab.club")
来为 Scratch 引入打开网页的功能。
你甚至可以更进一步,在 Scratch 中自定义积木!不需要编程 JavaScript,通过 Python 来扩展 Scratch!让我们构建一个打开网页的积木(Scratch本身没有打开网页的功能):
点击制作新的积木:
制作自定义积木,添加输入项目
: url 参数.
接下来我们开始定义这个积木的功能,完成之后我们就可以使用它了
以上例子的功能是按下空格,打开 CodeLab 主页。
你可以在插件里添加更多的类似PyHelper
的自定义类,来为 Scratch 引入更多新的能力,使用 Python 就行!
延伸¶
再来做一个例子,@HansonXie 给我写了封邮件,说想写一个extension或者node来进行文件存储,希望用Python来做,而不是Javascript。在此我写个简单例子
我们可以使用 Jupyterlab 编辑extension_python.py. 在其中增加一个新的助手类,来负责存储文件
class StorageHelp: def save_text_to_file(text, filename): with open(filename, "w"): filename.write(text)
之后,将其添加到eval中(使其可用)。
eval(code, {"__builtins__": None}, { "PyHelper": self.PyHelper, "StorageHelp": StorageHelp() })
完成后,重新勾选extension_python.py(stop and start,不需要重启 Adapter)。
此次,自定义的积木,包括两个参数:存储的文本(text) 和 文件名(filename)
提醒
注意文件名和内容都是字符串,有引号"xxxxx"
点击运行新的积木, 在jupyterlab中,可以看到新创建的文件已经在 extensions 目录里
提醒
exec 可能带来各种安全风险,暂时将其从插件市场移走了。eval也更符合我们采用的对象/消息
隐喻。
如果你确实需要exec,可以自行构建插件, 参考python_exec.py
内置在 Adapter 里的 Python 插件以 eval 执行 Python 代码(只能执行表达式),如果你希望以功能更轻大的 exec (可执行任何 Python 语句)执行 Python 代码,可以在插件市场里下载 extension_python_exec 插件。
关于 eval 和 exec 的区别,参考:
我们之没有将 extension_python_exec 内置在 Adapter 中,而是希望用户在需要时自行下载,因为它的功能过于强大,可能会带来一下风险,所以选择权交由使用者。强大的能力通常会伴随风险,当然我们不会做太多限制,由你决定:)