百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

在 python 中用 Web 方式创建漂亮的图形用户界面(GUI)

wptr33 2025-05-08 21:36 14 浏览

在本文中,我们将使用一个特殊的库 eel,为 python 脚本创建出色的图形用户界面 (GUI)。创建图形用户界面,有很多库可以选择,如 tkinter、wxPython 等。eel 是一个允许我们利用 Web 技术,如 HTML、CSS、JS,来构建更漂亮、更现代的用户界面。

更令人兴奋的是,eel 允许我们从 javascript 运行 python 函数,反之亦然,因此,我们可以将 python 和 javascript 完美的结合在一起。

安装 eel

pip install eel

使用 eel

使用 eel 创建图形用户界面,你至少要准备两个文件,一个 Python 脚本文件,一个 Html 网页文件。

文件内容及结构如下所示:

|--app.py       <-- Python 主程序文件
|--web          <-- web 文件夹
   |--index.html    <-- web文件夹下的html文件
# app.py 文件
import eel
eel.init('web')    # 初始化web文件夹
eel.start('index.html')  # 启动页面
<!- index.html 文件 ->
<!DOCTYPE html>
<html lang="en">
  <head>
 <meta charset="UTF-8">
 <title>APP标题</title>
 <script type="text/javascript" src="/eel.js"></script>
  </head>
  <body>
 APP正文
  </body>
</html>

特别注意,Html 文件中要引入 eel.js,不用管实际的JS脚本文件具体放在哪个路径。

<script type="text/javascript" src="/eel.js"></script>

运行 app.py 文件前,请安装谷歌浏览器(Google Chrome),eel 可以和谷歌浏览器完美结合。

深入 eel

以上示例只实现了一个空白的窗口,我们尝试复杂一点的应用实现某种功能,添加按钮,定义函数,美化 Html。

文件结构:

|--app.py       <-- Python 主程序文件
|--web          <-- web 文件夹
   |--index.html    <-- web文件夹下的html文件
   |--css        <-- css 文件夹
      |--main.css    <-- css文件夹下的的样式文件
   |--js        <-- js 文件夹
      |--main.js    <-- js文件夹下的的脚本文件
# app.py 文件
import eel
import random
from datetime import datetime
eel.init('web')
# 定义函数
@eel.expose
def get_random_name():
    eel.prompt_alerts('Random name')

@eel.expose
def get_random_number():
    eel.prompt_alerts(random.randint(1, 100))

@eel.expose
def get_date():
    eel.prompt_alerts(datetime.now().strftime("%d/%m/%Y %H:%M:%S"))

@eel.expose
def get_ip():
    eel.prompt_alerts('127.0.0.1')

eel.start('index.html', size= (800,450)) #定义窗口尺寸
<!- index.html 文件 ->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Eel 示例</title>

    <link rel="stylesheet" href="css/main.css">
    <script type="text/javascript" src="/eel.js"></script> 
</head>
<body>
    <div class="topnav">
        <a class="active" id="button-name">显示名字</a>
        <a id="button-number">随机数</a>
        <a id="button-date">日期时间</a>
        <a id="button-ip">显示 ip</a>
      </div> 
</body>
<script src="js/main.js"></script>
</html>
/* css 文件 */
.topnav {
    background-color: #333;
    overflow: hidden;
  }

.topnav a {
    float: left;
    color: #f2f2f2;
    text-align: center;
    padding: 14px 16px;
    text-decoration: none;
    font-size: 17px;
  }

.topnav a:hover {
    background-color: #ddd;
    color: black;
  }
/* js 文件*/
document.getElementById("button-name").addEventListener("click", ()=>{eel.get_random_name()}, false);
document.getElementById("button-number").addEventListener("click", ()=>{eel.get_random_number()}, false);
document.getElementById("button-date").addEventListener("click", ()=>{eel.get_date()}, false);
document.getElementById("button-ip").addEventListener("click", ()=>{eel.get_ip()}, false);

eel.expose(prompt_alerts);
function prompt_alerts(description) {
  alert(description);
}

运行结果:

更多 eel 功能请参考相应官方网站。eel 实际上是在本机建立一个简易 web 服务器,调用谷歌浏览器并打开相应网页(
http://localhost:8000/index.html),我们可以利用 Python、Html、JavaScript、css 制作功能丰富、漂亮的图形用户界面。

文章创作不易,如果您喜欢这篇文章,请关注、点赞并分享给朋友。如有意见和建议,请在评论中反馈。

相关推荐

redis的八种使用场景

前言:redis是我们工作开发中,经常要打交道的,下面对redis的使用场景做总结介绍也是对redis举报的功能做梳理。缓存Redis最常见的用途是作为缓存,用于加速应用程序的响应速度。...

基于Redis的3种分布式ID生成策略

在分布式系统设计中,全局唯一ID是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增ID已无法满足需求。高并发、高可用的分布式ID生成方案成为构建可靠分布式系统的必要条件。R...

基于OpenWrt系统路由器的模式切换与网页设计

摘要:目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户、提升服务的目标。传统路由器自带的Luci界面提供了工厂模式的Web界面,用户可通过该界面配置路...

这篇文章教你看明白 nginx-ingress 控制器

主机nginx一般nginx做主机反向代理(网关)有以下配置...

如何用redis实现注册中心

一句话总结使用Redis实现注册中心:服务注册...

爱可可老师24小时热门分享(2020.5.10)

No1.看自己以前写的代码是种什么体验?No2.DooM-chip!国外网友SylvainLefebvre自制的无CPU、无操作码、无指令计数器...No3.我认为CS学位可以更好,如...

Apportable:拯救程序员,IOS一秒变安卓

摘要:还在为了跨平台使用cocos2d-x吗,拯救objc程序员的奇葩来了,ApportableSDK:FreeAndroidsupportforcocos2d-iPhone。App...

JAVA实现超买超卖方案汇总,那个最适合你,一篇文章彻底讲透

以下是几种Java实现超买超卖问题的核心解决方案及代码示例,针对高并发场景下的库存扣减问题:方案一:Redis原子操作+Lua脚本(推荐)//使用Redis+Lua保证原子性publicbo...

3月26日更新 快速施法自动施法可独立设置

2016年3月26日DOTA2有一个79.6MB的更新主要是针对自动施法和快速施法的调整本来内容不多不少朋友都有自动施法和快速施法的困扰英文更新日志一些视觉BUG修复就不翻译了主要翻译自动施...

Redis 是如何提供服务的

在刚刚接触Redis的时候,最想要知道的是一个’setnameJhon’命令到达Redis服务器的时候,它是如何返回’OK’的?里面命令处理的流程如何,具体细节怎么样?你一定有问过自己...

lua _G、_VERSION使用

到这里我们已经把lua基础库中的函数介绍完了,除了函数外基础库中还有两个常量,一个是_G,另一个是_VERSION。_G是基础库本身,指向自己,这个变量很有意思,可以无限引用自己,最后得到的还是自己,...

China&#39;s top diplomat to chair third China-Pacific Island countries foreign ministers&#39; meeting

BEIJING,May21(Xinhua)--ChineseForeignMinisterWangYi,alsoamemberofthePoliticalBureau...

移动工作交流工具Lua推出Insights数据分析产品

Lua是一个适用于各种职业人士的移动交流平台,它在今天推出了一项叫做Insights的全新功能。Insights是一个数据平台,客户可以在上面实时看到员工之间的交流情况,并分析这些情况对公司发展的影响...

Redis 7新武器:用Redis Stack实现向量搜索的极限压测

当传统关系型数据库还在为向量相似度搜索的性能挣扎时,Redis7的RedisStack...

Nginx/OpenResty详解,Nginx Lua编程,重定向与内部子请求

重定向与内部子请求Nginx的rewrite指令不仅可以在Nginx内部的server、location之间进行跳转,还可以进行外部链接的重定向。通过ngx_lua模块的Lua函数除了能实现Nginx...