Python中PyWebview库的具体使用

 更新时间:2025年12月16日 08:38:21   作者:华丽的周遭  
pywebview是一个轻量级、跨平台的 Python 库,用于在桌面应用中嵌入系统原生的WebView组件,下面就来详细的介绍一下PyWebview库的使用,感兴趣的可以了解一下

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 pywebview

  • Linux 额外依赖(GTK+ 后端):

    Ubuntu/Debian:sudo apt-get install python3-gi python3-gi-cairo gir1.2-webkit2-4.0

    Fedora: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 会是不错的选择。

官网:https://pywebview.flowrl.com/

GitHub:https://github.com/r0x0r/pywebview

到此这篇关于Python中PyWebview库的具体使用的文章就介绍到这了,更多相关Python PyWebview库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 实现图与图之间的间距调整subplots_adjust

    python 实现图与图之间的间距调整subplots_adjust

    这篇文章主要介绍了python 实现图与图之间的间距调整subplots_adjust,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 浅谈python条件表达式:多项分支,双向分支

    浅谈python条件表达式:多项分支,双向分支

    这篇文章主要介绍了浅谈python条件表达式:多项分支,双向分支的使用,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 一文详解如何在浏览器前端运行Python程序

    一文详解如何在浏览器前端运行Python程序

    这篇文章主要介绍了如何在浏览器前端运行Python程序的相关资料,在前端运行Python代码的多种方式,包括Pyodide、Brython、Transcrypt等,每种方式都有其特点和适用场景,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • 关于Python-faker的函数效果一览

    关于Python-faker的函数效果一览

    今天小编就为大家分享一篇关于Python-faker的函数效果一览,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Keras 实现加载预训练模型并冻结网络的层

    Keras 实现加载预训练模型并冻结网络的层

    这篇文章主要介绍了Keras 实现加载预训练模型并冻结网络的层,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 在VScode中引用自定义模块问题

    在VScode中引用自定义模块问题

    这篇文章主要介绍了在VScode中引用自定义模块问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • Python实现简单层次聚类算法以及可视化

    Python实现简单层次聚类算法以及可视化

    这篇文章主要为大家详细介绍了Python实现简单层次聚类算法以及可视化,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • 解决python使用list()时总是报错的问题

    解决python使用list()时总是报错的问题

    这篇文章主要介绍了解决python使用list()时总是报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解

    python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解

    这篇文章主要介绍了python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Python中base64与xml取值结合问题

    Python中base64与xml取值结合问题

    这篇文章主要介绍了Python中base64与xml取值结合问题,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12

最新评论