目录
问题重述
今天需要用JavaScript编写一个应用,其中部分功能需要调用Python函数。一番搜索之后,发现可以使用Python eel库,详细请参考js调用Python函数。于是,我马上安装eel库,版本号为0.16.0。但是,在实现的过程中遇到了一些问题并解决,如下:
问题一
0.16.0版本的eel库的默认使用的浏览器为chrome,而我只使用Edge浏览器。于是。当我调用eel库时,遇到了OSError: Can't find Google Chrome/Chromium installation报错,那么,如何把eel库使用的浏览器改为Edge呢?
问题二
在解决问题一之后,我的Python程序终于不报错了。但是,JavaScript使用eel调用Python函数后,在网页中显示的是[object Promise],又该如何解决?
问题一的解决
根据参考文章,我首先尝试简单试验,代码如下:
import eel
@eel.expose
def my_add(a, b):
return a+b
eel.init(r'C:') #给出包含web文件的文件夹
eel.start('b.html') #开始进入循环,自动启动你的主页
运行中,在eel.start一行给出报错:OSError: Can't find Google Chrome/Chromium installation
于是,我查看了eel库的源码,联系下面这三个文件,逐渐明白其中的原因,
__init__.py
browsers.py
edge.py
原理是把'mode'关键字的值修改为'edge'即可,修改之后的代码如下:
import eel
@eel.expose
def my_add(a, b):
return a+b
eel._start_args['mode']='edge'
eel.init(r'C:') #给出包含web文件的文件夹
eel.start('b.html') #开始进入循环,自动启动你的主页
与问题一相关的:Edge浏览器的环境变量设置
注意,如果你真的是Edge浏览器的使用者,
还需要把Edge浏览器的程序文件“msedge.exe”所在的路径添加到环境变量。
问题二的解决
根据参考文章,我编写了简单的html文件进行试验。理想的试验结果为,在网页中显示两数之和,即显示一个数字,但是显示的结果却是[object Promise]。
对于这个问题,向C知道提问“JavaScript如何解决返回[object Promise]”,它的回答如下:
于是,我在代码中增加了.then(),修改之后,完整的HTML代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="/eel.js"></script>
</head>
<body>
JavaScript调用Python函数,运行结果如下:
<p id="demo"></p>
<script>
async function test() {
const res = await eel.my_add(10, 15)().then();
document.getElementById("demo").innerHTML = res;
}
test();
</script>
</body>
</html>
运行结果
运行成功,截图如下:
结语
实现了“使用前端语言JavaScript调用Python函数来实现需求”的操作。
如有侵权请联系我删除。