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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

利用Eel使JavaScript調用Python程序

Eel簡介

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

Eel實際上是啟動了一個本地的web服務器, 它允許你將python的函數暴露給javascript, 所以網頁端也能調用python函數。

有很多類似于electron的python實現, 比如cefpython, 但是Eel是輕量級的, 它只是啟動了一個chrome app, 所以需要你提前安裝好chrome瀏覽器才可以, 而electron和cefpython都是封裝了網頁渲染引擎的。

安裝很簡單:

使用pip就行:

pip install eel

用法

目錄結構

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

my_python_script.py

other_python_module.py

web/

main.html

css/

style.css

img/

logo.png

HelloWrold

你需要寫一個簡單的main.html頁面, 然后放到存放網頁的文件夾web, 這個文件夾內的文件都被前端訪訪問。然后寫一個簡單的app.py文件, 代碼如下:

import eel

eel.init('web')

eel.start('main.html')

最后只要在命令行運行:python app.py即可看到你的頁面。

可選參數

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

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

暴露函數

為了實現高級的功能, 你必須要在前端頁面中引入下面的js模塊:

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

@eel.expose

def my_python_function(a, b):

print(a, b, a + b)

然后你在前端, 可以使用下面的js代碼來調用你的python函數:

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

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

當然你也可可以將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’文件的主要內容:

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)

回調函數

當你調用一個被暴露的函數的時候, 我們可以傳入一個函數, 這樣就能在函數執行完畢之后立即調用這個函數。例如:

在js里定義一個函數:

eel.expose(js_random);

function js_random() {

return Math.random();

}

然后, 在python里調用的時候:

# 這是一個回調函數def print_num(n):

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

# 在python里調用js的函數, 然后, 再傳入一個回調函數

# 回調函數將會在js函數執行完畢之后再執行eel.js_random()(print_num)

同步返回

在python端, 我們只要不使用回調函數就能同步返回:

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

假如python里已經暴露了一個函數py_random, 在JavaScript端, 程序不允許阻塞, 所以只能使用await來避免使用回調函數:

async function run() {

// 只要函數前面帶有async, 才能在函數內部使用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();

打包二進制文件

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

在你的app根目錄下執行下面的命令:

python -m eel [your_main_script] [your_web_folder]

這將創建一文件夾dist, 如果你想要創建單文件程序, 你需要使用--onefile參數, 如果不想程序運行的時候有一個黑色命令窗口, 你可以使用--noconsole參數。

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。