Python中PyWebview庫(kù)的具體使用
pywebview是一個(gè)輕量級(jí)、跨平臺(tái)的 Python 庫(kù),核心功能是在桌面應(yīng)用中嵌入系統(tǒng)原生的 WebView 組件,讓你可以用 HTML/CSS/JavaScript 構(gòu)建 UI,同時(shí)用 Python 處理邏輯——完美匹配“Web 技術(shù)做 UI + Python 做后端”的需求。
1. 核心定位
pywebview 不是“打包 Chromium 的 Electron 替代品”,而是復(fù)用系統(tǒng)自帶的 WebView(如 Windows 的 Edge/IE、macOS 的 WebKit、Linux 的 GTK+Webkit/Qt WebEngine),因此:
- 體積極?。o額外瀏覽器依賴);
- 外觀與系統(tǒng)原生應(yīng)用一致;
- 性能更優(yōu)(無需加載完整的 Chromium)。
2. 關(guān)鍵特點(diǎn)
(1)跨平臺(tái)支持
覆蓋主流桌面系統(tǒng),嵌入式 Linux 也友好(需 X11/Wayland 圖形環(huán)境):
- Windows:默認(rèn)用 Edge (WebView2),兼容 IE11(可選);
- macOS:用系統(tǒng) WebKit(Safari 內(nèi)核);
- Linux:默認(rèn)用 GTK+3 + WebKit2GTK,可選 Qt WebEngine(需 PyQt5/PySide2)。
(2)雙向通信(JS ↔ Python)
最核心的能力之一——讓 Web UI 和 Python 后端無縫交互:
- Python 暴露 API 給 JS:通過
js_api參數(shù)傳遞 Python 對(duì)象/類,JS 可通過window.pywebview.api調(diào)用; - Python 調(diào)用 JS:用
window.evaluate_js()執(zhí)行 JS 代碼,獲取返回值; - JS 回調(diào) Python:支持異步調(diào)用(如
async/await),適合復(fù)雜交互。
(3)輕量與原生體驗(yàn)
- 不捆綁瀏覽器,啟動(dòng)速度快;
- 窗口樣式(標(biāo)題欄、邊框、圖標(biāo))遵循系統(tǒng)規(guī)范;
- 支持系統(tǒng)級(jí)特性(如菜單、拖放、打?。?。
(4)現(xiàn)代 Web 支持
兼容 HTML5、CSS3、ES6+,可集成 Vue/React/Angular 等前端框架,或用 QML 風(fēng)格的 Web 組件。
3. 基礎(chǔ)使用示例
(1)最簡(jiǎn)示例:加載網(wǎng)頁(yè)/本地 HTML
import webview
# 創(chuàng)建窗口,加載遠(yuǎn)程 URL 或本地 HTML 文件(file:// 開頭)
window = webview.create_window(
title='PyWebView Demo',
url='https://pywebview.flowrl.com/', # 遠(yuǎn)程網(wǎng)頁(yè)
# url='file:///path/to/local.html', # 本地 HTML
width=800,
height=600,
resizable=True
)
# 啟動(dòng)應(yīng)用(阻塞式,直到窗口關(guān)閉)
webview.start()(2)雙向通信示例
Python 端(暴露 API):
import webview
class PythonAPI:
def greet(self, name):
"""JS 調(diào)用的 Python 方法"""
return f"Hello, {name}! (from Python)"
def show_alert(self, message):
"""Python 主動(dòng)調(diào)用 JS 彈窗"""
window.evaluate_js(f'alert("{message}")')
# 創(chuàng)建窗口時(shí)綁定 API
window = webview.create_window(
'API Demo',
url='index.html', # 本地 HTML 文件
js_api=PythonAPI() # 暴露給 JS 的對(duì)象
)
webview.start()JS 端(index.html):
<!DOCTYPE html>
<html>
<body>
<input type="text" id="name" placeholder="Enter your name">
<button onclick="callPythonGreet()">Call Python Greet</button>
<button onclick="callPythonAlert()">Call Python Alert</button>
<script>
// 調(diào)用 Python 的 greet 方法(異步)
async function callPythonGreet() {
const name = document.getElementById('name').value;
const result = await window.pywebview.api.greet(name);
alert(result);
}
// 調(diào)用 Python 的 show_alert 方法(同步)
function callPythonAlert() {
window.pywebview.api.show_alert('Hi from JS!');
}
</script>
</body>
</html>4. 安裝與依賴
通用安裝:
pip install pywebviewLinux 額外依賴(GTK+ 后端):
Ubuntu/Debian:
sudo apt-get install python3-gi python3-gi-cairo gir1.2-webkit2-4.0Fedora:
sudo dnf install python3-gobject gtk3 webkit2gtk3Qt 后端(可選):需先安裝 PyQt5/PySide2,再用
pip install pywebview[qt]
5. 適用場(chǎng)景
完美匹配的需求:
- 用 Web 技術(shù)快速構(gòu)建桌面 UI:比如工具類應(yīng)用(配置界面、監(jiān)控面板)、輕量級(jí)客戶端;
- 嵌入式 Linux GUI:在帶屏的嵌入式設(shè)備(如工業(yè)平板、智能終端)上,用 Web 做靈活 UI,Python 處理邏輯;
- 混合應(yīng)用開發(fā):結(jié)合 Flask/Django 做本地服務(wù)器,pywebview 加載
http://localhost:5000作為 UI; - 原型驗(yàn)證:快速將 Web 原型轉(zhuǎn)為桌面應(yīng)用,無需學(xué)習(xí) Qt/Cocoa 等原生 GUI 框架。
6. 優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 低門檻:用熟悉的 Web 技術(shù)做 UI,Python 寫邏輯;
- 輕量:無冗余依賴,內(nèi)存占用遠(yuǎn)低于 Electron;
- 原生體驗(yàn):窗口、字體、交互與系統(tǒng)一致;
- 靈活:支持前端框架、雙向通信、自定義窗口樣式。
缺點(diǎn)
- WebView 版本依賴系統(tǒng):舊系統(tǒng)(如 Windows 7 無 Edge)可能用 IE,兼容性受限;
- 高級(jí)特性需手動(dòng)適配:如硬件加速、離線緩存(需結(jié)合 Service Worker);
- 嵌入式 Linux 需圖形環(huán)境:無 X11/Wayland 時(shí)無法運(yùn)行。
總結(jié)
pywebview 是“Web UI + Python 后端”模式的輕量橋梁,既發(fā)揮 Web 的靈活性,又保留 Python 的高效。如果你想快速把 Web 原型變成桌面應(yīng)用,pywebview 會(huì)是不錯(cuò)的選擇。
官網(wǎng):https://pywebview.flowrl.com/
GitHub:https://github.com/r0x0r/pywebview
到此這篇關(guān)于Python中PyWebview庫(kù)的具體使用的文章就介紹到這了,更多相關(guān)Python PyWebview庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 實(shí)現(xiàn)圖與圖之間的間距調(diào)整subplots_adjust
這篇文章主要介紹了python 實(shí)現(xiàn)圖與圖之間的間距調(diào)整subplots_adjust,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
淺談python條件表達(dá)式:多項(xiàng)分支,雙向分支
這篇文章主要介紹了淺談python條件表達(dá)式:多項(xiàng)分支,雙向分支的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04
關(guān)于Python-faker的函數(shù)效果一覽
今天小編就為大家分享一篇關(guān)于Python-faker的函數(shù)效果一覽,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11
Keras 實(shí)現(xiàn)加載預(yù)訓(xùn)練模型并凍結(jié)網(wǎng)絡(luò)的層
這篇文章主要介紹了Keras 實(shí)現(xiàn)加載預(yù)訓(xùn)練模型并凍結(jié)網(wǎng)絡(luò)的層,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python實(shí)現(xiàn)簡(jiǎn)單層次聚類算法以及可視化
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)簡(jiǎn)單層次聚類算法以及可視化,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03
解決python使用list()時(shí)總是報(bào)錯(cuò)的問題
這篇文章主要介紹了解決python使用list()時(shí)總是報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05
python軟件測(cè)試Jmeter性能測(cè)試JDBC Request(結(jié)合數(shù)據(jù)庫(kù))的使用詳解
這篇文章主要介紹了python軟件測(cè)試Jmeter性能測(cè)試JDBC Request(結(jié)合數(shù)據(jù)庫(kù))的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

