首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PyQt5:Web页面交互初探2-1

PyQt5

59篇

PyQt5:Web页面交互初探2-1(QWebChannel和QWebEngineView的综合使用)

导读:共享类的介绍

LEARN MORE

正文

上期我们利用QWebEngineView和ECharts完成了一个漂亮的饼图,这篇可以看成是PyQt5向Web页面传递参数的。本期我们尝试Web页面向PyQt5传递相关的参数。本期涉及到的PyQt5类是QWebChannel。

1

总体介绍

QWebChannel填补了C++应用程序(这里是针对Qt,PyQt5是Python)和HTML / JavaScript应用程序之间的空白。通过将QObject派生对象发布到QWebChannel并在HTML端使用qwebchannel.js,可以透明地访问QObject的属性和公共函数和方法。不需要手动消息传递和数据序列化,Python端的属性更新和信号发射会自动传输到可能远程运行的HTML客户端。在客户端,将为任何已发布的QObject创建JavaScript对象。它反映了对象的API,因此直观易用。

QWebChannel API可以与任何可以在本地甚至远程计算机上运行的HTML客户端进行通信。唯一的限制是HTML客户端支持qwebchannel.js使用的JavaScript功能。因此,人们可以与基本上任何现代HTML浏览器或独立JavaScript运行时进行交互,例如node.js。

详细内容请见官网:

http://doc.qt.io/qt-5/QWebChannel.html

类归属

PyQt5->QtWebChannel->QWebChannel

继承关系

PyQt5->QObject->QWebChannel

2

小例子

本次的小例子我们自己写了一个简单的HTML页面,页面上就一个功能,填写用户名和密码,然后提交。

在这个小例子中我们分别实现以下两个功能:

1、通过Web页面提交后,PyQt5应用程序收到了Web页面中提交的用户名和密码,并完成PyQt5应用程序中用户名和密码的自动填充。效果如下:

2、通过PyQt5应用程序提交后,在Web页面中得到了PyQt5应用程序中传来的用户名和密码,并完成Web页面中自动填充。效果如下:

话说这个是怎么实现的呢?第二种方式我们可以采用上期介绍了通过运行JavaScript代码的方式完成传值。那么第一种呢?这个就是本期的重点了。

要完成这个功能,我们需要借助于“第三方共享类”,如下图:

借助“第三方共享类”,我们实现了Web页面到PyQt5值传递。

3

部分核心代码解析

共享类

我们先来看看共享类。

在这个共享类里面我们比以前多了一个新的知识点:pyqtProperty

使用pyqtProperty()函数定义新的PyQt属性。 它的使用方式与标准的Python property()函数相同。 事实上,以这种方式定义的PyQt属性也表现为Python属性。

那么问题又来了,什么是Python property()函数??

根据Python的帮助文档上的介绍,它的完全形式是这样的:

作用是返回Python的某一个属性。

fget是获取属性值的函数。 fset是用于设置属性值的函数。 fdel是用于删除属性值的函数。 doc为该属性创建了一个docstring。

典型用法是定义可被管理的属性x:

如果c是C的实例,c.x将调用getter,c.x = value将调用setter和del c.x将调用delx。

如果给定,doc将是property属性的docstring。 否则,该属性将复制fget的docstring(如果存在)。

这使得使用property()作为装饰器可以轻松创建只读属性:

@property装饰器将voltage()方法转换为具有相同名称的只读属性。

属性对象具有可用作装饰器的getter,setter和deleter方法,这些方法创建属性的副本,并将相应的访问函数设置为装饰函数。举例如下:

此代码与第一个示例完全等效:

请务必为其他函数指定与原始属性相同的名称(在本例中为x)。

返回的属性对象还具有与构造函数参数对应的属性fget,fset和fdel。

在PyQt5中,它是这么用的:

感觉很复杂!

创建一个既作为Python属性又作为PyQt属性的属性。

参数:

type - 属性的类型。 它是Python类型对象或字符串。

fget - 用于获取属性值的,可选。

fset - 用于设置属性值的,可选。

freset - 用于将属性值重置为其默认值的,可选。

fdel - 用于删除属性的,可选。

doc - 属性的docstring,可选。

designable - 设置Qt DESIGNABLE标志,可选。

scriptable - 设置Qt SCRIPTABLE标志,可选。

stored - 设置Qt STORED标志,可选。

user - 设置Qt USER标志,可选。

constant - 设置Qt CONSTANT标志,可选。

final - 设置Qt FINAL标志,可选。

notify - 未绑定通知信号,可选。

revision - 导出到QML的修订版。

返回类型:属性对象。

也可以使用pyqtProperty()作为装饰器,方法与标准Python property()函数相同。 以下示例显示如何使用getter和setter定义int属性:

好了,现在我们回过头来再看下我们自己定义的共享类。

写上,但是后面我们没用。

当我们得到从Web页面传来值的时候,我们处理一下,分成用户名和密码,并将其通过自定义信号发射出去。

形成一个属性。具体哪里使用,我们后面会介绍。

可能到这里你有点云里雾里的感觉,不要急,接下来的更精彩!

4

最后

好的,今天这期就这样结束吧。下期我们再继续。如果你喜欢本篇文章,请给我点赞

赞赏(推荐)

分享给你的好友们吧!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180802G1IAPP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券