
pywebview是一个轻量级、跨平台的 Python 库 ,核心功能是在桌面应用中嵌入系统原生的 WebView 组件,让你可以用 HTML/CSS/JavaScript 构建 UI,同时用 Python 处理逻辑------完美匹配"Web 技术做 UI + Python 做后端"的需求。
1. 核心定位
pywebview 不是"打包 Chromium 的 Electron 替代品",而是复用系统自带的 WebView(如 Windows 的 Edge/IE、macOS 的 WebKit、Linux 的 GTK+Webkit/Qt WebEngine),因此:
-
体积极小(无额外浏览器依赖);
-
外观与系统原生应用一致;
-
性能更优(无需加载完整的 Chromium)。
2. 关键特点
(1)跨平台支持
覆盖主流桌面系统,嵌入式 Linux 也友好(需 X11/Wayland 图形环境):
-
Windows:默认用 Edge (WebView2),兼容 IE11(可选);
-
macOS:用系统 WebKit(Safari 内核);
-
Linux:默认用 GTK+3 + WebKit2GTK,可选 Qt WebEngine(需 PyQt5/PySide2)。
(2)双向通信(JS ↔ Python)
最核心的能力之一------让 Web UI 和 Python 后端无缝交互:
-
Python 暴露 API 给 JS :通过
js_api参数传递 Python 对象/类,JS 可通过window.pywebview.api调用; -
Python 调用 JS :用
window.evaluate_js()执行 JS 代码,获取返回值; -
JS 回调 Python :支持异步调用(如
async/await),适合复杂交互。
(3)轻量与原生体验
-
不捆绑浏览器,启动速度快;
-
窗口样式(标题栏、边框、图标)遵循系统规范;
-
支持系统级特性(如菜单、拖放、打印)。
(4)现代 Web 支持
兼容 HTML5、CSS3、ES6+,可集成 Vue/React/Angular 等前端框架,或用 QML 风格的 Web 组件。
3. 基础使用示例
(1)最简示例:加载网页/本地 HTML
python
import webview
# 创建窗口,加载远程 URL 或本地 HTML 文件(file:// 开头)
window = webview.create_window(
title='PyWebView Demo',
url='https://pywebview.flowrl.com/', # 远程网页
# url='file:///path/to/local.html', # 本地 HTML
width=800,
height=600,
resizable=True
)
# 启动应用(阻塞式,直到窗口关闭)
webview.start()
(2)双向通信示例
Python 端(暴露 API):
python
import webview
class PythonAPI:
def greet(self, name):
"""JS 调用的 Python 方法"""
return f"Hello, {name}! (from Python)"
def show_alert(self, message):
"""Python 主动调用 JS 弹窗"""
window.evaluate_js(f'alert("{message}")')
# 创建窗口时绑定 API
window = webview.create_window(
'API Demo',
url='index.html', # 本地 HTML 文件
js_api=PythonAPI() # 暴露给 JS 的对象
)
webview.start()
JS 端(index.html):
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>
// 调用 Python 的 greet 方法(异步)
async function callPythonGreet() {
const name = document.getElementById('name').value;
const result = await window.pywebview.api.greet(name);
alert(result);
}
// 调用 Python 的 show_alert 方法(同步)
function callPythonAlert() {
window.pywebview.api.show_alert('Hi from JS!');
}
</script>
</body>
</html>
4. 安装与依赖
-
通用安装 :
pip install pywebview -
Linux 额外依赖(GTK+ 后端):
Ubuntu/Debian:
sudo apt-get install python3-gi python3-gi-cairo gir1.2-webkit2-4.0Fedora:
sudo dnf install python3-gobject gtk3 webkit2gtk3 -
Qt 后端(可选) :需先安装 PyQt5/PySide2,再用
pip install pywebview[qt]
5. 适用场景
完美匹配的需求:
-
用 Web 技术快速构建桌面 UI:比如工具类应用(配置界面、监控面板)、轻量级客户端;
-
嵌入式 Linux GUI:在带屏的嵌入式设备(如工业平板、智能终端)上,用 Web 做灵活 UI,Python 处理逻辑;
-
混合应用开发 :结合 Flask/Django 做本地服务器,pywebview 加载
http://localhost:5000作为 UI; -
原型验证:快速将 Web 原型转为桌面应用,无需学习 Qt/Cocoa 等原生 GUI 框架。
6. 优缺点
优点
-
低门槛:用熟悉的 Web 技术做 UI,Python 写逻辑;
-
轻量:无冗余依赖,内存占用远低于 Electron;
-
原生体验:窗口、字体、交互与系统一致;
-
灵活:支持前端框架、双向通信、自定义窗口样式。
缺点
-
WebView 版本依赖系统:旧系统(如 Windows 7 无 Edge)可能用 IE,兼容性受限;
-
高级特性需手动适配:如硬件加速、离线缓存(需结合 Service Worker);
-
嵌入式 Linux 需图形环境:无 X11/Wayland 时无法运行。
总结
pywebview 是**"Web UI + Python 后端"模式的轻量桥梁**,既发挥 Web 的灵活性,又保留 Python 的高效。如果你想快速把 Web 原型变成桌面应用,pywebview 会是不错的选择。