用于基于浏览器的桌面应用程序的工具

sidegears的Python项目详细描述


Sidegears桌面应用程序运行时

https://gitlab.com/john.tourtellott/sidegears

Sidegears是一组用于创建桌面的轻量级工具 包含HTML/CSS/JavaScriptUI和 python后端。工具集有两部分

  • 用于后端处理和平台访问的python内核。蟒蛇 内核可从pypi("pip install sidegears")获得。
  • 基于浏览器的用户界面的javascript客户端。javascript 客户可从NPMJS("NPM安装侧齿轮")获得。

两半通过一个标准的WebSocket连接起来 通过json-rpc消息进行通信。在典型的用例中, 在浏览器中运行的用户界面通过 侧齿轮API。请参阅npm包中的示例,包括使用 从python启动浏览器实例的python webruntime库。

侧齿轮支持4个rpc运输箱中的3个:

  • 从javascript客户端到python内核的rpc请求。
  • 从客户端到内核的rpc通知。
  • 从内核到客户端的rpc通知。

sidegears不支持从内核到 客户端。可以添加,但不认为 设想的桌面应用程序。

python内核

sidegears内核使用运行在 异步事件循环。内核有两个公共对象:

from sidegears.kernel import RPCKernel, rpc_method

核心方法是:

  • 开始(self,host='localhost',port='5678',close\u on\u disconnect=false) 启动内核,在指定的 主机和端口。当设置了"断开连接时关闭"标志时,内核 将一直运行,直到客户端连接关闭。(这个电话不是 阻塞。)
  • 停止(自身)停止内核,终止任何WebSocket连接。
  • 等待关闭(自身)返回一个未来,当 内核已停止。当关闭连接时使用此方法 启动内核时设置标志。
  • 发送通知(self,method,params=none)发送通知 给客户的信息。
  • 设置基本日志记录(self,enabled)启用rpc消息的日志记录 发送和接收。
  • 在json rpc中设置调试(self,enabled)启用的调试选项 服务器,
  • 设置日志值(自,启用)启用基本日志时, 缩短记录到控制台的消息。

应用程序rpc方法是通过使用rpc方法指定的。 装饰器,例如:

@rpc_method
async def multiply(x, y):
    return x*y

注意,rpc方法必须用async关键字定义。

运行内核的几个示例应用程序的源代码 和启动浏览器/ui都包含在包分发文件中。 您可以在python的site packages/sidegears文件夹中找到它们。

javascript客户端包

javascript库与 对应的python sidegears包。当巨蟒 sidegears内核正在运行,sidegears js库可以连接 到内核并进行函数调用(作为 websockets上的json rpc消息。)

dist文件夹中有四个包:

  • sidegears.js:umd格式,用于在浏览器中运行或与 常见的js应用程序。这是默认的软件包入口点。
  • sidegears.esm.js:es6包,用于捆绑到大型应用程序中
  • sidegears-plugin.js:浏览器或 共同的
  • sidegears-plugin.esm.js:vue应用程序的es6格式,用于 绑定到应用程序中

javascript用户界面/客户端

对于starndard html页面,使用sidegears.jssidegears.esm.js, 取决于您的捆绑格式。这个api非常小LL,并使用 在examples/client/client.html文件中。api方法是:

  • sidegears.connect(主机='localhost',端口=5678)打开连接 到内核。方法返回一个promise对象,它必须 在内核上调用方法之前进行解析。

  • sidegears.disconnect()关闭与内核的连接。为了 桌面应用程序,可以响应窗口调用 beforeunload事件,但不能保证 在窗口关闭前执行。

  • sidegears.requester返回一个代理对象,该对象可用于 直接进行rpc请求调用。简而言之,打电话 sidegears.requester.method(params)等同于调用 sidegears.sendrequest(方法,参数)

  • sidegears.notifier返回用于生成rpc的代理对象 通知直接调用。打电话 sidegears.notifier.method(params)等同于调用 sidegears.sendNotification(方法,参数)

  • sidegears.sendrequest(方法、参数)对 内核,返回用应答或 错误。"method"参数是一个字符串,"parameters"是 在内核中执行时传递给方法。只有 可以使用json序列化的参数。

  • sidegears.sendNotification(方法、参数)对 内核,但与request调用不同,rpc没有返回 通知电话。"method"参数是一个字符串,并且 "参数"在 内核。只能使用可以进行json序列化的参数。

  • sidegears.onnotify用于设置在 从python内核接收通知消息。

Vue API

对于vue.js应用程序,可以使用sidegears plugin.jssidegears plugin.esm.js文件,它实现了一个vue.js插件。 安装后,插件将插入全局vue.$\u sidegears对象。 plugin对象具有与上面描述的 标准API。来自Vue组件:

  • 这个。$\\u sidegears.connect(host='localhost',port=5678)
  • 这个。$\\u sidegears.disconnect()
  • 这个。$\\u sidegears.sendrequest(方法,参数)
  • 这个。$\\u sidegears.sendNotification(方法,参数)

其他方法是:

  • $u sidegears.isopen()返回布尔值指示 客户端是否连接到内核。

  • $\u sidegears.getrequestproxy()返回一个可以使 rpc请求直接调用(与javascript请求程序相同)。

  • $\u sidegears.getNotifyProxy()返回可以使 rpc通知直接调用(与javascript通知程序相同)。

此外,当通知消息是 从内核接收。事件参数是 方法和参数。

背景

在某些方面,sidegears类似于这样的应用程序框架 作为electron和nw.js,它还提供了一个html/js/css用户 接口。

  • 主要的区别是sidegears使用python后端, 而electron和nw.js使用nodejs。
  • 另外,在electron和nw.js中,ui和nodejs逻辑是紧密的 通过单个事件循环耦合;而sidegearui和 后端在单独的事件循环中运行,并且 可以在单独的进程中运行。(理论上,侧齿轮 前端和后端可以在不同的计算机上运行,尽管这是 不受官方支持。)
  • Sidegears可以与UI的现有浏览器一起使用, 或者在应用程序中嵌入浏览器。

最后,如果有人想知道"侧挡"这个词是从哪里来的:

  • "side"是指pyside,它是qt的原始名称 python[1]项目。我们最初的实现使用pyside 用于ui呈现引擎的qwebengine库(尽管我们有 转到了WebRuntime)。Sidegears也是 作者<
  • "Gears"是指TurboGears[2],一个成熟的Web框架 采用"同类最佳"的方法,将现有的工具 有凝聚力的系统我们喜欢他们的做法,并试图效仿。我们 还想把我们的项目描述成一个小的软件工具集, 不是全面的"平台"或"框架"。

[1]qt for python位于http://www.qt.io/qt-for-python" rel="nofollow">https://www.qt.io/qt for python

[2]TurboGears位于http://www.turbogears.org/" rel="nofollow">http://www.turbogears.org/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
与ReentrantLock相比,java ReentrantReadWriteLock的性能非常差   java如何使用Maven Android Studio正确导入?   安卓将ADB添加到我的Java PC应用程序   反射Java getDeclaredConstructor失败,来自JUnit的NoSuchMethodException   JSP上siteedit标记库的java替代   JavaSpring环境概要文件和JPA   java中是否有一个类似于StringBuilder的类,唯一的区别是它具有固定的长度?   JavaMathContext。小数点32 vs MathContext。小数点64,使用哪一个,为什么?   java使用spring在Ibm Websphere MQ中实现重试逻辑   java调用SpriteBatch。开始()和结束()   java有一种从文本中读取文本的方法。文件,并将其设置为pom中的maven属性。xml专家?   java让sitemesh使用struts2   Java Swing:在现有窗口上定位对话框   使用带有MemSql的JPA本机查询的java Select json列