说实话,我一开始看到这个项目的时候,也是半信半疑。用网页做桌面应用?那不还得打包个Chromium进去,随便一个Hello World就上百兆?但等我仔细扒了扒这个叫 Python-WebUI 的东西,才发现自己完全想岔了。
它到底是啥?
简单说,这就是一个让你用 Python 写后端、HTML/CSS/JS 写前端,然后拿你电脑上已经装好的浏览器来当界面展示的工具。你不需要嵌入任何浏览器内核,不需要打包一堆运行时,甚至不需要学那些老掉牙的GUI框架。
你写个show()方法,它就能弹出一个Chrome或者Firefox窗口,里面跑着你写的网页。而Python这边呢,负责处理逻辑、调用系统API、跟硬件打交道——各司其职,贼清爽。
以前为啥这么折腾?
我记得第一次用PyQt做小工具,光是打包出来的exe就快70MB,还时不时报dll缺失。后来换Electron?好嘛,一个空白项目直接奔着150MB去了,内存占用更是感人。
其实你想啊,现代浏览器本身就已经是一个极其完善的渲染引擎了。CSS动画、WebGL、调试工具、响应式布局……这些现成的强大功能,我们为啥要重新造轮子?传统GUI框架还在纠结按钮圆角要不要自己画,Web这边早就玩出花了。
它是怎么做到的?
WebUI的思路特别“偷懒”——它不是在程序里内嵌一个浏览器控件,而是通过本地通信协议,让Python程序去启动一个真实的浏览器进程(可以是用隐私模式的临时配置),然后两者之间通过一个极快的二进制协议传数据。
你点一下网页上的按钮,JS把消息发给本地的一个小服务器,Python收到后处理完再返回结果。整个过程轻飘飘的,不像WebView那样还得装整套SDK。
看个对比就明白了:
| | | | |
| | | | |
| | | | |
| WebUI | 仅需一个浏览器 | 仅需一个浏览器 | 仅需一个浏览器 | 几百KB |
没错,Python-WebUI这个库本身只有几百KB。它就是一个轻薄的桥梁,桥的两头分别是你的Python代码和用户电脑里随便哪个浏览器。
支持的浏览器?多到你用不过来
Chrome、Edge、Firefox、Brave、Vivaldi、Chromium、Yandex……甚至Opera也在路上。连苹果的Safari都快要支持了。基本上你能想到的主流浏览器,它都照顾到了。
上手到底有多简单?
你装一下:pip install webui2
然后写几行:
from webui import webui
my_window = webui.Window()
my_window.show('<html><script src="webui.js"></script> <h1>你好,世界!</h1> </html>')
webui.wait()
就能看到一个浏览器窗口弹出来,显示"你好,世界!"。当然你也可以把本地写好的复杂前端丢进去,或者用Vue、React构建的单页应用——全都没问题。
说点实在的
这玩意儿不是要取代所有桌面开发。如果你做的是那种对离线能力要求极高、或者需要深度集成操作系统特性的工具,可能还是原生更稳。但对于绝大多数内部工具、小型桌面应用、数据可视化面板、物联网控制台来说,它真的太适合了。
你想啊,用Python写逻辑(各种库随便调),用HTML写界面(随便找个模板改吧改吧),然后一分发——用户那边只要有个浏览器就能跑。不用装运行时,不用操心依赖冲突,也不用被Electron的磁盘占用吓得劝退。
个人觉得,这才是未来轻量级桌面应用该有的样子。别总想着搬砖头盖楼,有时候有现成的墙,你开个门就行。
项目地址:https://github.com/webui-dev/python-webui
PS:这项目还支持Go、Nim、Pascal、TypeScript等语言,不限于Python。有兴趣自己去翻翻他们的GitHub吧。