美文网首页Python之路
单轻量的GUI编程:PyWebview

单轻量的GUI编程:PyWebview

作者: 水之心 | 来源:发表于2020-11-30 13:46 被阅读0次

    pywebview 是围绕 webview 组件的轻量型跨平台包装器(wrapper),它允许在其自己的本机 GUI 窗口中显示 HTML 内容。它使您可以在桌面应用程序中使用 Web 技术,从而隐藏了 GUI 基于浏览器的事实。您可以将 pywebview 与轻量级的 Web 框架(例如 FlaskBottle)一起使用,也可以单独使用 Python 和 DOM 之间的双向桥梁。

    pywebview 使用本机 GUI 创建 Web 组件窗口:Windows 上的 WinForms,macOS 上的 Cocoa 和 Linux 上的 QT 或 GTK。如果选择冻结应用程序,则 pywebview 不会捆绑繁重的 GUI 工具箱或 Web 渲染器,从而使可执行文件的大小较小。pywebview 与 Python 3 兼容。

    安装:

    pip install pywebview
    

    Hello world:

    import webview
    webview.create_window('Hello world', 'https://pywebview.flowrl.com/hello')
    webview.start()
    

    create_window函数返回一个窗口实例,该实例提供许多窗口操作和与 DOM 相关的功能。

    Explore pywebview further by reading documentation, examples or contributing. If React is your thing, get started right away with React boilerplate.

    您可以根据需要创建任意多个窗口。GUI 循环启动后创建的 Windows 将立即显示。所有打开的窗口都作为列表存储在 webview.windows 中。窗口按创建顺序存储。

    create_window的第二个参数 url 可以指向远程或本地路径。另外,您可以通过设置 html 参数来加载HTML。

    import webview
    
    webview.create_window('Woah dude!', html='<h1>Woah dude!<h1>')
    webview.start()
    

    请注意,如果同时设置了 urlhtml,则 html 优先。

    pywebview 提供了多个 Web 渲染器的选择。要更改 Web 渲染器,请将启动功能的 gui 参数设置为所需的值(例如 cefqt)。有关详细信息,请参见 Renderer

    HTTP server

    pywebview提供了与 WSGI 兼容的 HTTP 服务器。要启动 HTTP 服务器,请将url设置为本地入口点(无协议模式),并将start函数的http_server参数设置为True

    import webview
    
    webview.create_window('Woah dude!', 'index.html')
    webview.start(http_server=True)
    

    如果希望将外部 WSGI 兼容的HTTP服务器与 pywebview 一起使用,则可以将服务器对象作为 URL 传递,即。在这种情况下,无需设置 http_server 参数。

    from flask import Flask
    import webview
    
    server = Flask(__name__, static_folder='./assets', template_folder='./templates')
    webview.create_window('Flask example', server)
    webview.start()
    

    Threading model

    webview.start 启动 GUI 循环,并且是一项阻塞功能。由于 GUI 循环受阻,您必须在单独的线程或进程中执行后端逻辑。您可以手动启动线程或进程。另外,您可以通过将函数作为要启动的第一个参数 func 来执行代码。第二个参数设置函数的参数。这种方法在后台启动线程,与手动启动线程相同。

    import webview
    
    def custom_logic(window):
        window.toggle_fullscreen()
        window.evaluate_js('alert("Nice one brother")')
    
    window = webview.create_window('Woah dude!', html='<h1>Woah dude!<h1>')
    webview.start(custom_logic, window)
    # anything below this line will be executed after program is finished executing
    pass
    

    Make Python and Javascript talk with each other

    您可以将自定义逻辑视为与 HTML/JS 领域中的 前端代码进行通信的后端。现在,您将如何使二者互相交流?pywebview 提供了两种方式的 JS-Python 桥接器,使您既可以通过 Python(通过 valuate_js)执行Javascript,也可以通过 Javascript(通过 js_apiexpose)执行 Python 代码。细节见:interdomain commmunication。另一种方法是在自定义逻辑中运行Python Web服务器(例如 Flask 或 Bottle),并使前端代码对它进行API调用。那将与典型的Web应用程序相同。例如,此方法适用于将现有的Web应用程序移植到桌面应用程序。有关这两种方法的更多信息,请参见 Architecture

    相关文章

      网友评论

        本文标题:单轻量的GUI编程:PyWebview

        本文链接:https://www.haomeiwen.com/subject/flurwktx.html