• Pywebview 2.0发布啦
  • 发布于 2个月前
  • 270 热度
    0 评论
Pywebview,这种类似于Electron的Python库已经发布了2.0版本。Pywebview允许您使用Web技术和Python相结合创建GUI应用程序。 使你可以用Python进行应用程序逻辑控制,使用Javascript和CSS生成GUI。 Pywebview对freeze支持良好从而实现了程序的可执行封装。
Pywebview2.0中最大的变化是Python和Javascript之间的双向通信,它完全消除了对Python Web服务器的需求。 下面我们以一个简单的Hello World来举例说明。
import webview
from threading import Thread
class Api():
    def helloWorld(self, param):
        return 'Hello Python!'
def load_html():
  webview.load_html('<p>Hello World</p>')
  webview.evaluate_js("""
    pywebview.api.helloWorld().then(function(response) {
      alert(response)
    })
  """)
if __name__ == '__main__':
    api = Api()
    t = Thread(target=load_html)
    t.start()
webview.create_window('Hello world', js_api=api)
这里有两个通信模块,evaluate.js和creat_window。 您可以使用evaluate_js从Python中执行任意Javascript代码并返回结果。 要从Javascript运行你的Python代码,你需要定义一个自定义类并将其实例传递给create_window的API参数。 该类的所有公共方法将通过pywebview.api对象以Javascript形式公开。 需要注意的是,即使你不需要自定义方法,也必须定义一个参数。 如果你想传递多个参数,你可以把它们放在一个字典中。 返回值类型和参数类型将在Javascript和Python之间转换。
想要获得更多的示例,请参阅我们自己的TODO应用程序(https://github.com/r0x0r/pywebview/tree/master/examples/todos)
这种方式的另一大特点是支持多窗口。 要创建第二个窗口,你可以如下这样做。
import webview
import threading
def create_new_window():
    child_window = webview.create_window('Window #2', width=800, height=400)
    webview.load_html('<h1>Master Window</h1>')
    webview.load_html('<h1>Child Window</h1>', uid=child_window)
if __name__ == '__main__':
    t = threading.Thread(target=create_new_window)
    t.start()
    # Master window
    webview.create_window('Window #1', width=800, height=600)
主窗口创建后,后续的create_window调用并未被阻塞,还将返回一个可传递给其他函数的唯一ID。
其他新功能包括
1.创建窗口时,现在可以指定一个html文件的相对路径(不需要使用file://或任何其他协议)。 这种方式可使链接资源的问题得以解决。 同时也适用于应用程序封装时。
2.target ="_ blank"链接将在外部浏览器中被打开。
3.非输入元素上的文本选择默认为禁用。
4.新的加载自定义CSS的load_css函数。
查看完整的更新日志点击这里(https://github.com/r0x0r/pywebview/blob/master/CHANGELOG.md)
未来的计划
目前最大的挑战是对Windows上Internet Explorer引擎的全面兼容,它仍然是开发人员可用的唯一原生Web渲染器。 我们还未支持Edge,目前的情况来看也永远无法全面支持。 换句话说,目前在Windows上对Pywebview支持最好的还是IE11。 半快速解决方案将是引入QT支持与其WebKit引擎,并计划支持CEF。 这两种解决方案都会大大增加应用程序的分发大小,但目前没有其他方法可以和Web标准的发展速度与时俱进。
用户评论