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
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):
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):
<!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 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. 适用场景
完美匹配的需求:
- 用 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 会是不错的选择。
官网:https://pywebview.flowrl.com/
github:https://github.com/r0x0r/pywebview
到此这篇关于python中pywebview库的具体使用的文章就介绍到这了,更多相关python pywebview库内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论