为你的 Python 应用程序创建一个现代 GUI
鳗鱼
安装鳗鱼
如何使用它?
在这篇文章中,我们将使用一个库,它将允许我们为日常的 Python 脚本创建出色的图形用户界面 (GUI)。
我们有很多基于 Python 创建 GUI 的选项,例如 tkinter、wxPython、PySimpleGui 等等。Tkinter 非常强大,允许我们创建跨平台应用程序,然而,基于 Tkinter 的 GUI 不如我们常见的 Web 应用程序和其他基于 Electron 的优秀应用程序那样美观。
Eel 是一个库,它允许我们利用 Web 技术,例如 HTML、CSS、JS,当然还有各种 Web 框架,如 bootstrap、jquery、很酷的绘图库(如 plotly)等。
鳗鱼
Eel 库让我们能够轻松地使用 HTML、CSS 和 JS 来构建用户界面,同时又不失强大的 Python 功能。Eel 依赖于一系列 Python 库,它只需创建一个本地 Web 服务器并打开一个浏览器(默认使用 Chrome),浏览器会渲染 HTML、CSS 和 JS,而 Python 则负责控制大部分逻辑。
Eel 很酷的一点是,它允许我们从 javascript 运行 python 函数,反之亦然,因此,我们可以交换信息并同时享受两全其美的优势(python 和 JS)。
安装鳗鱼
为了安装 eel 库,您可以从 Pypi 执行以下操作:
pip install eel
强烈建议首先创建一个虚拟环境。
如何使用它?
我们必须先创建文件夹结构,根文件夹是“application”。在里面,我们将创建 Python 脚本,我将其命名为 app.py。
为了更好地组织我们的代码,我们创建了一个名为“web”的子文件夹,其中包含 index.html 文件,以及两个用于存放 css 和 js 文件的子文件夹。
application
│ app.py
│
└───web
│ index.html
│
├───css
│ main.css
│
└───js
main.js
在本文中,我们将使用W3schools提供的预构建代码,为桌面应用程序构建一个类似文件菜单的顶部菜单。首先,我们必须编辑 html 文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Eel example</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">Display name</a>
<a id="button-number">Display a random number</a>
<a id="button-date">Display time and date</a>
<a id="button-ip">Display my ip</a>
</div>
</body>
<script src="js/main.js"></script>
</html>
正如您所看到的,您将能够使用 HTML 创建整个 GUI,我们只需添加<script type="text/javascript" src="/eel.js"></script>
,该脚本将允许我们调用我们公开的 python 函数。
对于 CSS 文件:
/* Add a black background color to the top navigation */
.topnav {
background-color: #333;
overflow: hidden;
}
/* Style the links inside the navigation bar */
.topnav a {
float: left;
color: #f2f2f2;
text-align: center;
padding: 14px 16px;
text-decoration: none;
font-size: 17px;
}
/* Change the color of links on hover */
.topnav a:hover {
background-color: #ddd;
color: black;
}
/* Add a color to the active/current link */
/* .topnav a.active {
background-color: #4CAF50;
color: white;
} */
最后,对于 JS 文件,我们只需为导航栏中的四个按钮添加事件监听器即可。如您所见,它们都调用了一些函数,但都以 eel 开头,例如 ell.get_random_name(),这是一个 Python 函数,因此,当我们点击按钮时,它会调用一个 Python 函数。此外,我们还有一个名为 prompt_alerts 的 JS 函数,它有一个装饰器 eel.expose,这允许我们从 Python 运行这个 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);
}
我们已经完成了图形用户界面,现在,我们必须创建 Python 文件。我们必须导入 Eel 库以及项目所需的所有其他库,在本例中是 Random 库和 DateTime 库。
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')
然后,我们必须将 eel.init 代码行(用于初始化 Eel 库)添加到特定文件夹。然后,我们创建四个函数,这些函数我们希望从 JS 调用,因此我们添加了 decorator @eel.expose
。如您所见,每个函数都调用我们的 JS 函数prompt_alerts
并传递一个字符串参数。
eel.start
将运行应用程序,有很多参数可以传递,在这个例子中,我们使用最少的参数,我们只是设置要呈现的 html 文件(相对于 web 文件夹)。
现在我们已经完成了代码,我们可以启动我们的应用程序了:
app.py
现在,您可以为您的 Python 应用程序创建出色的 GUI,在我们的下一个系列中,我们将创建一个复杂的示例并探索可以传递给 eel.start 的其他参数。
鏂囩珷鏉ユ簮锛�https://dev.to/kodark/creating-a-modern-gui-for-your-python-application-2mlp