简介
Eel 是一个简单的 Python 库, 用于制作类似 Electron 的离线 HTML/JS GUI 应用程序, 并可以完全访问 Python 功能和库。Eel 托管一个本地 Web 服务器, 让您可以标注 Python 中的函数, 以便从 JavaScript 调用它们, 反之亦然。Eel 旨在简化编写简短和简单的 GUI 应用程序的过程。
安装
可以通过 pip 从 pypi 安装 Eel:
pip install eel
如果需要 Jinja2 模板支持, 可以安装额外的依赖:
pip install eel[jinja2]
使用
目录结构 Eel
应用程序将分为前端(包含各种 Web 技术文件, 如 .html, .js, .css)和后端(包含各种 Python 脚本)。所有前端文件应放在单个目录中(如果需要, 可以在此目录内部further划分为文件夹)。
启动应用
假设您将所有前端文件放在一个名为 web 的目录中, 包括您的启动页 main.html, 则可以按以下方式启动应用程序:
import eel
eel.init('web')
eel.start('main.html')
这将启动一个默认设置的 Web 服务器(http://localhost:8000), 并在 Chrome 或 Chromium 浏览器中以"应用程序模式"(带有 --app 命令行标志)打开 http://localhost:8000/main.html。
应用选项
可以将其他选项作为关键字参数传递给 eel.start()。这些选项包括应用程序的模式(例如 'chrome'、'electron'、'edge'、'msie'、'custom')、服务器的主机名和端口、是否阻塞调用线程、Jinja2 模板文件夹、命令行参数、窗口大小和位置、关闭回调函数等。
暴露函数
除了前端文件夹中的文件, 还会提供一个 JavaScript 库 /eel.js。您应该在任何页面中包含这个库:
<script type="text/javascript" src="/eel.js"></script>
包含此库会创建一个 eel 对象, 可用于与 Python 端通信。使用 @eel.expose 装饰器标记的任何 Python 函数都将作为方法出现在 JavaScript 端的 eel 对象上。反之亦然, 使用 eel.expose() 公开的任何 JavaScript 函数都可以从 Python 端调用。
Hello, World! 让我们看一个简单的"Hello, World!"示例。
前端文件 web/hello.html
:
<!DOCTYPE html>
<html>
<head>
<title>Hello, World!</title>
<script type="text/javascript" src="/eel.js"></script>
<script type="text/javascript">eel.expose(say_hello_js);function say_hello_js(x) {console.log("Hello from " + x);}say_hello_js("Javascript World!");eel.say_hello_py("Javascript World!");</script>
</head>
<body>Hello, World!
</body>
</html>
后端文件 hello.py
:
import eeleel.init('web')@eel.expose
def say_hello_py(x):print('Hello from %s' % x)say_hello_py('Python World!')
eel.say_hello_js('Python World!')
eel.start('hello.html')
运行 Python 脚本后, 将打开一个浏览器窗口显示 hello.html, 控制台和终端中会分别显示来自 JavaScript 和 Python 的"Hello"消息。
异步 Python
Eel 基于 Bottle 和 Gevent, 提供了类似 JavaScript 的异步事件循环。为了避免 Python 标准库中的单线程假设, Gevent 会对一些模块进行"monkey patching"。通常, 您应该使用 eel.sleep() 而不是 time.sleep()。
打包分发
如果您想将应用程序打包成一个可在没有 Python 解释器的计算机上运行的程序, 可以使用 PyInstaller。配置一个包含所需 Python 版本和最小必要包的虚拟环境, 然后运行 python -m eel [your_main_script] [your_web_folder]
即可创建一个可分发的单文件应用程序。
总结
Eel 是一个轻量级的 Python 库, 可以帮助您快速开发基于 HTML/JS 的离线桌面应用程序。它提供了在 Python 和 JavaScript 之间轻松通信的功能, 同时还支持异步编程和打包分发。如果您正在寻找一种快速创建简单 GUI 应用程序的方法, Eel 绝对值得一试。
项目地址:
https://github.com/python-eel/Eel
原创 小白这样学Python