Eel入门还有一些案例

Eel入门还有一些案例

Eel 是一个 Python 库,它允许 Python 程序通过简单的 API 与网页进行交互。它使用 WebSocket 协议来实现 Python 后端和 JavaScript 前端之间的实时通信。下面是关于 Eel 的用法、通信原理和使用场景的一篇博客文章。

Eel的基本原理

image-20240712105805701

Eel的基本原理可以分为以下几个方面:

  1. WebSocket通信:WebSocket是一种网络通信协议,它允许在用户的浏览器和服务器之间建立一个持久的连接。Eel利用WebSocket实现前端和后端之间的实时、双向通信。
  2. Python后端:Eel的后端使用Python编写,可以执行复杂的逻辑和数据处理任务。Python代码可以通过Eel提供的API来向前端发送数据和接收前端的事件。
  3. HTML/JS/CSS前端:Eel允许开发者使用标准的Web技术来创建用户界面。HTML定义页面的结构,CSS用于样式设计,而JavaScript用于处理用户交互和动态更新页面内容。
  4. 动态内容更新:Eel的前端可以通过JavaScript调用后端Python函数,并将结果动态显示在网页上。同样,前端也可以监听用户的交互事件,并将这些事件发送到后端进行处理。
  5. 跨平台:由于Eel基于Web技术,因此它可以在任何支持现代Web浏览器的平台上运行,包括Windows、macOS、Linux以及移动设备。
  6. 简单易用:Eel旨在简化Python GUI开发过程,使得开发者可以快速构建具有丰富交互性的应用程序,而无需深入了解底层的网络通信细节。

eel + vue 实现一个python脚本

我先要实现如下效果,根据配置执行python脚本,并且输出pyhton 脚本的日志。

image-20240712110800244

效果展示

GIF 2024-7-12 10-20-51

代码讲解

python代码,main.py

  • 引入eel,配置web目录,配置页面入口,模式,然后启动。
  • 定义暴露给js 的 python 函数 。
import eel
import os
import platform
import sys
import time

#指定web文件的文件夹
eel.init("web")

#暴露函数给 js的 eel 对象
@eel.expose
def py_start():
    print("开始执行")
    for i in range(100):
        #调用js方法
        eel.js_insertLog(f'这是python日志{i}')
        time.sleep(0.5)

if sys.platform in ['win32', 'win64'] and int(platform.release()) >= 10:
    eel.start('index.html', mode='edge')
else:
    raise EnvironmentError('Error: System is not Windows 10 or above')

前端代码 web/index.html

  • 使用vue + elementui来作为web的框架
  • 调用 python 暴露的方法
  • 定义暴露给python 用来在页面上输出日志的 js 方法
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>小红书点赞</title>
  <link rel="stylesheet" href="./reset.css">
  <link rel="stylesheet" href="https://unpkg.com/element-ui@2.15.13/lib/theme-chalk/index.css">
  <link rel="stylesheet" href="./index.css">
</head>

<body>
<div id="app">
  <el-container>
    <el-header>
      <h2>xxxx工具</h2>
    </el-header>
    <el-container>
      <el-aside width="210px">目录</el-aside>
      <el-main>
        <el-card class="form-box">
          <div class="title">脚本配置</div>
          <el-form ref="form"
                   label-position="left"
                   :model="form" label-width="80px">
            <el-form-item label="输入框">
              <el-input style="width: 280px" v-model="form.name"></el-input>
            </el-form-item>
            <el-form-item label="点赞选项">
              <el-checkbox-group v-model="checkList">
                <el-checkbox label="1" disabled="">评论点赞</el-checkbox>
                <el-checkbox label="2">头像点赞</el-checkbox>
                <el-checkbox label="3">背景页点赞</el-checkbox>
              </el-checkbox-group>
            </el-form-item>
            <el-form-item label="下拉框">
              <el-select v-model="form.region" placeholder="请选择活动区域">
                <el-option label="区域一" value="shanghai"></el-option>
                <el-option label="区域二" value="beijing"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="startPython()">开始执行python脚本</el-button>
            </el-form-item>
          </el-form>
        </el-card>
        <el-card class="log-box">
          <el-input
            type="textarea"
            :rows="16"
            placeholder="请输入内容"
            v-model="logTextarea">
          </el-input>
        </el-card>
      </el-main>
    </el-container>
  </el-container>
</div>
<script type="text/javascript" src="/eel.js"></script>
<script src="https://unpkg.com/vue@2.7.14/dist/vue.js"></script>
<script src="https://unpkg.com/element-ui@2.15.13/lib/index.js"></script>
<script>
    var vm = new Vue({
        el: '#app',
        data() {
            return {
                logTextarea: "",
                logArr: [],
                checkList: ['1'],
                form: {
                    region: "shanghai"
                }
            };
        },
        methods: {
            startPython(){
                 //调用python暴露的方法
                 eel.py_start()
            }
        }
    })
</script>

<script type="text/javascript">
    //暴露给python 的js方法
    eel.expose(js_insertLog)
    function js_insertLog(log) {
        vm.logArr.unshift(log)
        vm.logTextarea = vm.logArr.join('\n');
    }

</script>
</body>
</html>

相关推荐

  1. 12.Netty入门案例

    2024-07-16 03:56:01       28 阅读
  2. Flink 入门案例介绍

    2024-07-16 03:56:01       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 03:56:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 03:56:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 03:56:01       57 阅读
  4. Python语言-面向对象

    2024-07-16 03:56:01       68 阅读

热门阅读

  1. 玩转springboot之SpringBoot使用jsp

    2024-07-16 03:56:01       20 阅读
  2. 神经网络调参技巧(入门案例教程)

    2024-07-16 03:56:01       19 阅读