首页 > 编程语言 >【Eel库】用于制作类似 Electron 的离线 HTML/JS GUI 应用程序

【Eel库】用于制作类似 Electron 的离线 HTML/JS GUI 应用程序

时间:2025-01-16 13:54:34浏览次数:1  
标签:eel Python GUI 离线 应用程序 Eel World hello

简介

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 eel

eel.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

标签:eel,Python,GUI,离线,应用程序,Eel,World,hello
From: https://www.cnblogs.com/o-O-oO/p/18674841

相关文章

  • 基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印):  仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要       在现代社会的众多场景中,如银行、车站、餐厅等,排队人数的统计对于资源分配、服务优化以及人员管理等方面具有极为重......
  • 物流管理系统【纯GUI窗口】(Java课设)
         客官进来看一眼呗,有惊喜!【帮你解决烦恼】:Java课设和计Java毕设太难不会做怎么办?系统类型纯Swing窗口类型【GUI】(即数据存在内存中,不用IO流和数据库存储数据)使用范围适合作为Java课设!!!部署环境jdk1.8+Idea或eclipse运行效果本系统源码地址:物流管理系统【纯GU......
  • centos7离线升级内核
    1.升级说明1.1系统默认信息系统版本:CentOS7.8默认内核版本:3.10.0-1127.el7.x86_641.2升级内核目的部署k8s需要1.3k8s官方要求cpu:2核以上mem:2G以上内核:4.x以上1.4升级内核版本(永久支持)CentOS7.8内核升级为:5.4.278 2.下载内核包地址(centos7内核升级)https......
  • Autopy 是一款基于 Python 和 Rust 的强大 GUI 自动化库
    Autopy是一款基于Python和Rust的强大GUI自动化库,它为开发者提供了简便且高效的API来模拟鼠标和键盘的操作、在屏幕上查找颜色和位图以及显示警报。这些功能使得Autopy成为了一个跨平台的自动化工具,适用于MacOSX、Windows以及支持XTest扩展的X11系统。跨......
  • Centos7.9离线部署ceph(octopus)
    原创文档编写不易,未经许可请勿转载,目前仅发布于博客园,其他平台均为非法转载。文档中有疑问的可以邮件联系我文章。邮箱:yinwanit@163.com说明文档适用于cenots7.9操作系统下部署cephoctopus版本分布式存储使用。离线部署的本质是先基于在线环境如vmwareworkstation虚拟机在线......
  • 在线翻译工具-免费离线且好用的OCR
    点击上方蓝字关注我前言CopyTranslator一个特别好用的在线翻译小帮手。你只需要把文字复制进去,它就能自动帮你翻译,而且它还很聪明,能自己认出是哪种语言。这个工具能一边翻译一边自动处理你复制的文字,比如去掉多余的格式、自动显示或隐藏翻译结果,用起来特别顺手。它翻译得又快又......
  • 【大数据】beeline 导出文件有特殊字符的问题解决
    问题近期在做大数据查询引擎导出文件的功能,使用了hive的beeline客户端。发现beeline导出的文件以及终端输出有许多特殊字符。按照官方文档使用beeline导出命令:[1]/usr/bin/beeline--silent=true--showHeader=true--outputformat=csv2-fquery.hql</dev/null>/tm......
  • 百万架构师第十六课:源码分析:Spring 源码分析:手写SpringAOP核心原理|JavaGuide
    已完成SpringIOCSpringDISpringMVC继续完善:SpringAOP的功能,基于SpringIOC和DI去完成未完成:SpringAOP、SpringTransaction、SpringJDBC、自己手写ORM框架。​SpringIOC入口,DispatcherServlet,通过DispatcherServlet启动一个ApplicationContext容......
  • 学英语学压测:07 jmeter 三种运行模式:GUI、命令行、Server
    ......
  • 简述下html5的离线存储原理,同时说明如何使用?
    HTML5的离线存储原理主要是基于浏览器对一个新建的.appcache文件(或称为manifest文件)的缓存机制。这个机制不是一种存储技术,而是一个缓存机制,通过该文件上的解析清单离线存储资源。这些资源会像cookie一样被存储下来,以便在网络离线状态下,浏览器可以通过这些被离线存储的数据进行页......