如果需要在程序中加载并显示网页,那QWebEngineView绝对是最佳的选择。该控件基于Chrome浏览器内核引擎,所提供的功能和方法还是比较强大的。

注:V5.11及更高版本的PyQt5中不包含QWebEngineView,请另外单独下载:

pip 

30.1 制作简单浏览器

本章我们就通过制作下图所示的简单浏览器来了解QWebEngineView的用法:

在输入框中输入网址并敲回车后,QWebEngineView控件加载并显示相应的网址内容。左上方的三个按钮可以允许我们进行前进、后退和刷新操作,右上方的两个按钮可以放大和缩小网页。

下面我们一步步来实现,首先完成浏览器的外观:

import 

1. 通过resize()方法来将窗口大小设为1000x600;

2. 实例化按钮控件、输入框控件以及QWebEngineView控件;

3. 完成布局,使用setSpacing()传入参数0代表让各个控件之间不存在间隔(主要想让按钮靠拢),随后我们在想要的地方使用addStretch(),这样就达到让输入框和按钮分离开来,而按钮之间又是相互靠拢的目的。

4. 给按钮添加图标,图片下载地址如下:

  • back.png: https://www.easyicon.net/download/png/1117578/64/
  • forward.png: https://www.easyicon.net/download/png/1117605/64/
  • refresh.png: https://www.easyicon.net/download/png/1117668/64/
  • zoom_in.png: https://www.easyicon.net/download/png/1117715/64/
  • zoom_out.png: https://www.easyicon.net/download/png/1117716/64/

5. 设置输入框宽度为400并设置占位符提示用户在这里输入网址。

此时运行截图如下,QWebEngine还没有显示任何网页:

接下来完成以下功能:在输入框中输入网址并敲击回车后,QWebEngineView加载并显示相应的网址内容:

def 

既然涉及到键盘,那肯定要用事件函数来处理了。

标准的键盘上是有两个回车键的,Key_Return为大回车,Key_Enter为小回车(这里我们把两种都考虑进来)如下图所示:

加上if self.url_le.hasFocus():判断是为了只有在输入框被编辑的状态下敲击回车才会让网页实现跳转(读者也可以去使用下市面上的浏览器看下是否是这样)。

条件都满足的话,就调用load()方法并传入一个QUrl类型参数即可(不能单单传入字符串,需要用QUrl()把字符串转为QUrl对象)。

虽然QWebEngineView已经提供了很多有用的方法,但是许多方面还是需要我们开发人员进行完善。比如用户如果只输入"http://baidu.com"的话,那QWebEngineView其实是识别不出来的,也就无法加载和显示网页了(会跳转到空白页)。

市面上的浏览器在用户只输入"http://baidu.com"的情况下,会自动在最前面加上"http://"或者“https://”,我们接下来完善下代码:

def 

调用startswith()方法判断用户输入的网址字符串是否是以"https://"或者“http://”开头的,如果是的话,则采用用户输入的网址;如果不是,则在前面加上"https://"。这样的话QWebEngineView就可以正常显示了。

接下来完成以下功能:首次运行程序时,QWebEngineView显示百度网页。

def 

非常简单,只需要在类初始化函数中调用以上函数即可。

到目前为止,程序代码如下:

import 

我们运行一下,发现两个问题:

1. 程序首次运行时,输入框文本并没有显示百度网址。

2. 当我们在输入框中输入"http://python.org"并敲击回车后,网页可以加载,但是输入框并没有显示当前应该要显示的“https://www.python.org/”。

或者在点击页面中的“Downloads”跳转到另一个页面后,输入框的文本也应该要相应地变为“https://www.python.org/downloads/”。

根据以上问题我们知道接下来应该把输入框的文本设置为QWebEngineView所加载的网址。QWebEngineView控件有一个信号urlChanged,该信号会在每次要加载的网址发生变化时发射。那我们其实可以把这个信号和槽函数连接起来,在槽函数中我们把输入框的文本设置为变化后QWebEngineView要加载的网址即可(其他信号例如loadStarted, loadFinished等其实也可以)。

我们只需要在browser_init()函数中加一行信号和槽函数连接的代码即可:

def 

调用QWebEngineView的url()方法获取QUrl对象,但这个不是字符串类型,所以还需要调用toDisplayString()方法来获取url文本字符串。现在再来运行下就会发现输入框的文本会跟随QWebEngineView当前加载的网址改变而改变了。

接下来我们完善按钮功能,首先是左上角的后退、前进和刷新。查看文档我们很容易就会发现QWebEngineView有几个槽函数可以实现这三个功能:

back()方法实现后退功能,forward()方法实现前进功能而reload()方法实现刷新功能。我们接下来只需要在btn_init()函数中加几行信号和槽函数连接的代码即可:

def 

此时运行下程序,就会发现程序可以像一个真正的浏览器一样后退、前进和刷新了。

最后是放大缩小功能,要实现这种功能我们需要用到zoomFactor()方法和setZoomFactor()方法。前者获取当前缩放值,后者设置缩放值。那也就是说我们每当用户点击放大或缩小按钮时,只需要先获取到当前的缩放值,然后放大的话就增加缩放值,缩小就减小缩放值。首先实现槽函数,代码如下:

def 

然后在btn_init()函数中再加两行信号和槽函数连接的代码:

def 

现在运行下程序,点击放大缩小按钮,页面就会相应的放大缩小:

​​但是放大和缩小的范围是有限定的:

根据文档我们可以知道范围为0.25-5.0,默认值是1.0。

完整代码如下:

import 

30.2 小结

1. 这个简单的浏览器还可以添加很多功能,或者再进行完善,让它更像一个真正的浏览器。比如程序首次运行时,前进和后退按钮应该都要设置为不可用,而且在无法前进和后退是也要设置为不可用(涉及到history()方法,小伙伴可以自己去实现下)。

2. 还是那句话——多查文档。如果你脑海里有想要实现的功能,你可以去查下文档看看这个控件有没有提供相应的方法。或者你脑海里可能一片空白,那你其实也可以先去读下文档看看某控件提供方法有没有你喜欢的,能给你带来灵感也说不定。

hikvision v2.3控件网页demo_《快速掌握PyQt5》第三十章 网页交互QWebEngineView相关推荐

  1. hikvision v2.3控件网页demo_网页禁止复制粘贴怎么解决?教你五招轻松搞定

    经常在网上遇到一些无法复制的文章,有什么办法可以绕开这种限制,将网页内容轻松下载下来呢?其实网页上文本复制下来不是问题,只要用对方法,都可以轻松搞定,将相关文本复制下来,一起来看看要怎么做吧. 方法一 ...

  2. hikvision v2.3控件网页demo_昆山UI网页设计师专业培训班 UI设计好就业吗?

    昆山UI网页设计师专业培训班 UI设计好就业吗? 昆山UI网页设计师专业培训班 UI设计好就业吗? 交互设计师在工作中的沟通场景 在整个产品生命周期中,交互设计师的工作流程始终贯穿着整个过程,首要问题 ...

  3. C# Winform 通过FlowLayoutPanel及自定义的编辑控件,实现快速构建C/S版的编辑表单页面...

    个人理解,开发应用程序的目的,不论是B/S或是C/S结构类型,无非就是实现可供用户进行查.增.改.删,其中查询用到最多,开发设计的场景也最为复杂,包括但不限于:表格记录查询.报表查询.导出文件查询等等 ...

  4. 安卓APP_ 控件(11)webView —— 简单应用:显示网页

    摘自:安卓APP_ 控件(11)webView -- 简单应用:显示网页 作者:丶PURSUING 发布时间: 2021-05-11 11:50:52 网址:https://blog.csdn.net ...

  5. CListCtrl控件的InsertItem和SetItemText和SetItem三个函数的区别

    CListCtrl控件的InsertItem和SetItemText和SetItem三个函数的区别 分类: vc 2013-03-17 08:21  1548人阅读  评论(0)  收藏  举报 本人 ...

  6. pyqt5如何循环遍历控件名_如何用 PyQt5 快速构建一个简单的 GUI 应用

    点击上方"Python全家桶","星标"或"置顶" 关键时刻,第一时间送达 本文已获授权,欢迎分享转发 1. 介绍 Python GUI 常 ...

  7. .net网页input 赋值 提交时空白_《快速掌握PyQt5》第三十章 网页交互QWebEngineView...

    如果需要在程序中加载并显示网页,那QWebEngineView绝对是最佳的选择.该控件基于Chrome浏览器内核引擎,所提供的功能和方法还是比较强大的. 注:V5.11及更高版本的PyQt5中不包含Q ...

  8. Delphi控件开发浅入深出(三)

    三.开关控件TlincoSwitch 用过Delphi1(好古老的东东呀!)的人相信都记得这个开关控件 ,不知道当初Borland为什么把这么一个在开发普通应用程序中应用不到的工控控件放到Delphi ...

  9. 【QTdesigner】课时37.按钮控件(QPushButton)【pyqt5+QTdesigner模式】

    课程目录 视频链接 课程重点 代码位置 完整代码 遇到的问题 改写效果展示 改写注意点 改写代码(QTdesigner模式) ** >>> 点击进入:pyqt5专栏<<& ...

最新文章

  1. tomcat 初始管理用户和密码
  2. Nature子刊:细菌和古菌从域到种的完整分类
  3. 机器能否拥有像人类一样的意识?Science长文综述解读
  4. MySQL当您插入列无效的数据插入
  5. Struts2→拦截器、工作原理、拦截器计算Action执行时间、Struts2自带拦截器、拦截器栈
  6. Forrester告诫CIO们:谨慎应用区块链网络
  7. Windows程序设计(5):移动窗口、调整窗口大小
  8. Gephi教程实战:从入门到精通
  9. Scratch3 优化,开启压缩,提高访问速度
  10. 真假屏幕测试软件,如何判断4K电视真假?测试方法在这里,最简单用手机就可以...
  11. office 论文 页码_word如何设置毕业论文页码
  12. mysql 增加临时表空间_数据库临时表空间设置
  13. PLC培训班一般多少钱?
  14. 使用Microsoft Teams Rooms和Teams设备提升混合体验
  15. build gradle settings 设置、读取变量
  16. 真正中文攻略之 Scarlett~スカーレット(攻略、存档)
  17. java重复代码重构_重构重复代码
  18. 一个无经验的大学毕业生,可以转行做软件测试吗?我的真实案例
  19. 数学里上凹,下凹,上凸,下凸
  20. FL studio 20简易入门教程 -- 第九篇 -- 完整编曲流程

热门文章

  1. oracle存储查询出来的值_技术分享|浅析ORACLE数据库物理体系结构及其对应优化策略...
  2. CTF-密码学-攻防世界-幂数加密(云影加密)解密脚本
  3. Python基础教程:高阶函数和函数嵌套
  4. python实用小方法
  5. python3.6 使用pyinstaller 打包web程序的方法
  6. I/O多路复用是什么?(I/O multiplexing)
  7. Eclipse 动态库调试(联合调试)
  8. 广义相对论与量子力学的矛盾
  9. java根据enum某个属性值获取枚举项
  10. dell跳过开机硬件检测_移动工作站DELL Precision 7740评测连载2:开机初测