单轻量的GUI编程:PyWebview

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

pywebview 允许您使用 HTML,CSS和 Javascript 为 Python 程序构建GUI, 将 pywebview 视为适用于 Python 的轻量级Electron。与 Electron 不同,pywebview 不捆绑 Web 渲染器,而是依赖于操作系统提供的渲染。旁注:捆绑渲染器仍然是一种选择,例如 CEF。

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函数返回一个窗口实例,该实例提供许多 window 操作和与 DOM 相关的功能。

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

您可以根据需要创建任意多个窗口。GUI loop 启动后创建的 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 渲染器,请将 start 函数的 gui 参数设置为所需的值(例如 cefqt)。有关详细信息,请参见 Renderer

HTTP server

pywebview提供了与 WSGI 兼容的 HTTP 服务器。要启动 HTTP 服务器,请将url设置为本地入口点(无 protocol模式),并将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

检索 DOM 节点

现在,您可以使用 window.get_elements(selector) 函数检索DOM节点。节点使用 domJSON 库进行序列化。Example

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容