Python使⽤Eel和HTML开发桌⾯应⽤
最近感觉Python越⽤越顺⼿了,⼲啥都挺好⽤,可是就桌⾯应⽤这⼀块⼀直没有到很好的解决⽅案,试过了TK、QT、wx之流的GUI ⽅案后感觉都只能做点简单的界⾯还⾏,控件稍微多点就感觉好变态啊,⽽且界⾯还是丑的⼀逼。。。今天闲逛居然发现了Eel这货,类似Electron的效果,可以直接使⽤HTML来做界⾯,程序逻辑部分还是⽤python写,js和py可以⽆缝对接,感觉好像发现了新⼤陆~
环境准备
Python 3.7.3
Chrome浏览器(由于Eel是直接调⽤的Chrome的app启动模式,所以⾃⼰很轻量,不过需要提前安装有Chrome)
IDE⽤了VSCode
前端直接使⽤BootCDN上的bootstrap和jQuery
安装Eel库
pip install eel
效果展⽰
⽂件结构
.
├── main.py 主⼊⼝
├── venv virtualenv环境
└── web  静态⽂件
├── css
├── favicon.ico
├── img
└── main.html
上⾯web⽂件夹⽤来存放各种静态⽂件,我是直接⽤的CDN上的css和js库,⽐⽤npm装到本地还省事⼉。
这⾥主要提⼀下favicon.ico这个⽂件,以前撸html从来没做过这个图标,在Eel中这个⽂件将会显⽰为程序左上⾓的图标,所以还是挑个好看点的扔进来吧。
main.py
import eel
# 定义html⽂件所在⽂件夹名称
eel.init('web')
@pose # 使⽤装饰器,类似flask⾥⾯对路由的定义
def py_fun(a):
content ='你好!'+ a
return(content)
# 测试调⽤js中的函数,同样需要使⽤回调函数
js_return = eel.js_fun('python传过去的参数')(lambda x:print(x))python怎么读取桌面上的文件
# 启动的函数调⽤放在最后,port=0表⽰使⽤随机端⼝,size=(宽,⾼)
eel.start('main.html', port=0, size=(600,300))
main.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible"content="ie=edge">
<title>Eel演⽰</title>
<link href="cdn.bootcss/twitter-bootstrap/4.3.1/css/bootstrap.min.css"rel="stylesheet"> <script type="text/javascript"src="/eel.js"></script>
</head>
<body>
<div class="container">
<div class="card mt-4">
<div class="card-body">
<h4>js & py互调测试</h4>
<input type="text"class="form-control"id="in">
<p id="out"></p>
<button class="btn btn-lg btn-success"onclick="doThis()">调⽤Python函数</button>
</div>
</div>
</div>
<script src="cdn.bootcss/jquery/3.4.1/jquery.min.js"></script>
<script src="cdn.bootcss/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
<script>
// 调⽤python中的函数,注意需要在定义前加上async声明异步
async function doThis(){
var par=$("#in").val();
let content =await eel.py_fun(par)();//这⾥⽤let不⽤var,调⽤的python函数后⾯是两对括号
$("#out").text(content);
}
// 将js中的函数暴露给python,这个貌似不怎么需要⽤
function js_fun(a){
return('这是调⽤js中函数返回的结果:'+ a);
}
</script>
</body>
</html>
总结
总体来说还是⽐较切中我的G点的,能⽤HTML做界⾯的话,颜值肯定有保证了,接下来就是继续研究python源代码转EXE或者加密打包的问题了,还有~不知道如果配上vue.js的话会不会飞起来?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。