介绍 pywebview 3.0
介绍 pywebview 3.0
我很高兴宣布 pywebview 3.0 的发布。pywebview 允许您使用 HTML、CSS 和 JavaScript 为您的 Python 程序构建 GUI,同时尽可能地隐藏 GUI 是基于浏览器的事实。可以将 pywebview 视为针对 Python 的轻量级 Electron。与 Electron 不同,pywebview 不捆绑网页渲染器,而是依赖于操作系统提供的渲染程序。附注:捆绑渲染器仍然是一个选项,例如在 CEF 的情况下。
如果您是新用户,请访问 使用指南、API 参考、示例 以及我们自己的 TODO 应用。
还有,pywebview 可以通过以下命令安装:
pip install pywebview
新功能
版本 3.0 是第一个与之前版本不兼容的版本。在 2.x 中引入的多窗口支持导致了一些值得商榷的架构决策,这些问题现在已得到解决,并希望更合理。显著的变化包括:
webview.start()
最大的变化是引入了窗口对象和 webview.start()
函数,该函数启动 GUI 循环。之前 GUI 循环是由首次调用 webview.create_window()
启动的。因此,create_window
实际上具有两个功能:创建一个窗口并启动 GUI 循环。为了进一步混淆,首次调用 create_window
是阻塞的,而后续从子线程的调用则不是。现在无论调用多少次,create_window
都会创建一个窗口并返回一个窗口对象,并且该函数始终是非阻塞的。请记住,在启动 GUI 循环之前,不会显示任何窗口。使用新的 API,pywebview 的“你好世界”示例看起来像这样:
import webview
window = webview.create_window('Hello world', 'https://pywebview.flowrl.com/hello')
webview.start()
webview.start
还提供了一种方便的方式,在 GUI 循环启动后执行线程特定的代码,因此不再需要线程样板代码。
import webview
def change_title(window):
window.change_title('pywebview whoa')
window = webview.create_window('pywebview wow', 'https://pywebview.flowrl.com/hello')
webview.start(change_title, window)
窗口对象
所有与窗口管理和网络内容相关联的函数,均已移动到由 webview.create_window
返回的窗口对象中。例如,webview.load_html
变成了 window.load_html
,如下所示:
import webview
def load_html(window):
window.load_html('<html><body><h1>pywebview wow!</h1><body></html>')
window = webview.create_window('pywebview wow')
webview.start(load_html, window)
内置 HTTP 服务器
pywebview 现在提供了自己的 HTTP 服务器,用于为本地静态文件提供服务。出于混淆目的,该服务器在随机端口上启动。
import webview
window = webview.create_window('pywebview wow', 'assets/index.html')
webview.start(http_server=True)
事件
3.0 引入了新的事件系统,允许订阅/取消订阅事件。当前实现了 shown
和 loaded
事件。事件对象由窗口对象提供。有关使用详细信息,请参阅 events 示例。
Edge 支持
Windows 现在支持 EdgeHTML。EdgeHTML 自动选择,如果您的系统要求满足 (.NET 4.6.2 和 Windows 10 1803)。遗憾的是,目前无法通过 EdgeHTML 访问本地文件,因此您必须使用 HTTP 服务器。如果您出于某种原因希望强制使用 MSHTML,则可以 webview.start(gui='mshtml')
。
create_window 现在可以直接加载 HTML
import webview
window = webview.create_window('pywebview wow', html='<html><body><h1>pywebview wow!</h1><body></html>')
webview.start()
如果同时提供 url 和 html 参数,则 html 优先。
get_elements
现在可以使用 window.get_elements(selector)
函数检索 DOM 节点。节点序列化使用 domJSON 库。
Config 已移除
webview.config
不复存在。要设置 GUI 渲染器,请使用 webview.start
的 gui
参数
confirm_quit 现在是 confirm_close
例如:webview.create_window('Window', confirm_close=True)
支持我们的项目
pywebview 是一个资源有限的小项目,任何形式的帮助都很受欢迎。无论是代码提交(PRs)、文档编写、还是研究工作,我们都热烈欢迎!尽管评论也很重要,但实际贡献(如代码提交)更受欢迎。请参考贡献力量指南开始参与。
如果你觉得 pywebview 有用,请给予支持。我们通过Patreon和Open Collective提供捐赠方式,同时也接受一次性Paypal捐款。如果你代表一家公司,请考虑成为赞助商以获得公司曝光的机会并连接到Python开发者社区。