日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python eel 多线程_利用Eel使JavaScript调用Python程序

發(fā)布時(shí)間:2024/1/23 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python eel 多线程_利用Eel使JavaScript调用Python程序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

利用Eel使JavaScript調(diào)用Python程序

Eel簡(jiǎn)介

Eel是一個(gè)輕量的python桌面GUI開發(fā)第三方庫(kù), 它使用HTML/JS作為界面開發(fā)語(yǔ)言, 但是能夠訪問所有的python功能, 類似于electron, 但是比它輕量。

Eel實(shí)際上是啟動(dòng)了一個(gè)本地的web服務(wù)器, 它允許你將python的函數(shù)暴露給javascript, 所以網(wǎng)頁(yè)端也能調(diào)用python函數(shù)。

有很多類似于electron的python實(shí)現(xiàn), 比如cefpython, 但是Eel是輕量級(jí)的, 它只是啟動(dòng)了一個(gè)chrome app, 所以需要你提前安裝好chrome瀏覽器才可以, 而electron和cefpython都是封裝了網(wǎng)頁(yè)渲染引擎的。

安裝很簡(jiǎn)單:

使用pip就行:

pip install eel

用法

目錄結(jié)構(gòu)

Ele工程需要將前端頁(yè)面和js代碼都放在一個(gè)特定的文件夾, 其他python模塊可以放到任意可以使用的地方。類似這樣的目錄結(jié)構(gòu):

my_python_script.py

other_python_module.py

web/

main.html

css/

style.css

img/

logo.png

HelloWrold

你需要寫一個(gè)簡(jiǎn)單的main.html頁(yè)面, 然后放到存放網(wǎng)頁(yè)的文件夾web, 這個(gè)文件夾內(nèi)的文件都被前端訪訪問。然后寫一個(gè)簡(jiǎn)單的app.py文件, 代碼如下:

import eel

eel.init('web')

eel.start('main.html')

最后只要在命令行運(yùn)行:python app.py即可看到你的頁(yè)面。

可選參數(shù)

在調(diào)用eel.start的時(shí)候, 可以傳入一些參數(shù), 比如設(shè)置窗口尺寸的size參數(shù):eel.start('main.html', size=(50, 50)), 主要可以設(shè)置mode/port和啟動(dòng)chrome的時(shí)候一些命令行參數(shù), 這些命令行參數(shù)可以從這里查看 :

eel.start('main.html', port=8888)

暴露函數(shù)

為了實(shí)現(xiàn)高級(jí)的功能, 你必須要在前端頁(yè)面中引入下面的js模塊:

然后你可以在寫python模塊的時(shí)候, 使用裝飾器eel.expose來暴露你的python函數(shù)給JavaScript:

@eel.expose

def my_python_function(a, b):

print(a, b, a + b)

然后你在前端, 可以使用下面的js代碼來調(diào)用你的python函數(shù):

console.log('Calling Python...');

eel.my_python_function(1, 2); // This calls the Python function that was decorated

當(dāng)然你也可可以將JavaScript代碼暴露給python用:

eel.expose(my_javascript_function);

function my_javascript_function(a, b, c, d) {

if(a < b){

console.log(c * d);

}

}

然后你就可以在python中掉用JavaScript:

print('Calling Javascript...')

eel.my_javascript_function(1, 2, 3, 4) # This calls the Javascript function

完整案例

下面是我們的’main.html’文件的主要內(nèi)容:

Hello, World!

eel.expose(say_hello_js); // Expose this function to Python

function say_hello_js(x) {

console.log("Hello from" + x);

}

say_hello_js("Javascript World!");

eel.say_hello_py("Javascript World!"); // Call a Python function

Hello, World!

然后python模塊是:

import eel

eel.init('web') # Give folder containing web files

@eel.expose # Expose this function to Javascriptdef say_hello_py(x):

print('Hello from %s' % x)

say_hello_py('Python World!')

eel.say_hello_js('Python World!') # Call a Javascript function

eel.start('hello.html') # Start (this blocks and enters loop)

回調(diào)函數(shù)

當(dāng)你調(diào)用一個(gè)被暴露的函數(shù)的時(shí)候, 我們可以傳入一個(gè)函數(shù), 這樣就能在函數(shù)執(zhí)行完畢之后立即調(diào)用這個(gè)函數(shù)。例如:

在js里定義一個(gè)函數(shù):

eel.expose(js_random);

function js_random() {

return Math.random();

}

然后, 在python里調(diào)用的時(shí)候:

# 這是一個(gè)回調(diào)函數(shù)def print_num(n):

print('Got this from Javascript:', n)

# 在python里調(diào)用js的函數(shù), 然后, 再傳入一個(gè)回調(diào)函數(shù)

# 回調(diào)函數(shù)將會(huì)在js函數(shù)執(zhí)行完畢之后再執(zhí)行eel.js_random()(print_num)

同步返回

在python端, 我們只要不使用回調(diào)函數(shù)就能同步返回:

n = eel.js_random()() # 這里有兩個(gè)括號(hào)print('Got this from Javascript:', n)

假如python里已經(jīng)暴露了一個(gè)函數(shù)py_random, 在JavaScript端, 程序不允許阻塞, 所以只能使用await來避免使用回調(diào)函數(shù):

async function run() {

// 只要函數(shù)前面帶有async, 才能在函數(shù)內(nèi)部使用await

let n = await eel.py_random()(); // Must prefix call with 'await', otherwise it's the same syntax

console.log('Got this from Python:' + n);

}

run();

打包二進(jìn)制文件

如果你想讓用戶下載你的軟件使用, 而用戶沒有安裝python, 你最好將你的程序打包成二進(jìn)制可執(zhí)行文件, 那么最好使用pyinstaller。

在你的app根目錄下執(zhí)行下面的命令:

python -m eel [your_main_script] [your_web_folder]

這將創(chuàng)建一文件夾dist, 如果你想要?jiǎng)?chuàng)建單文件程序, 你需要使用--onefile參數(shù), 如果不想程序運(yùn)行的時(shí)候有一個(gè)黑色命令窗口, 你可以使用--noconsole參數(shù)。

超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的python eel 多线程_利用Eel使JavaScript调用Python程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。