python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法


Posted in Python onFebruary 26, 2020

PyQt5浏览器控件QWebEngineView

PyQt5使用QWebEngineView控件来展示HTML页面,对老版本的QWebView类不在进行维护,因为QWebEngineView使用CHromium内核可以给用户带来更好的体验

QWebEngineView类中常用方法

方法 描述
load(QUrl url) 加载指定的URL并显示
setHtml(QString&html) 将网页视图的内容设置为指定的HTML内容

QWebEngineView控件使用load()函数加载一个Web页面,实际上就是使用HTTP Get方法加载web页面,这个控件可以加载本地的web页面,也可以加载外部的WEb页面,其核心代码如下

view=QWebEngineView()
view.load(QUrl('https://3water.com'))
view.show()

QWebEngineView加载显示外部的web页面实例

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *

class MainWindow(QMainWindow):
  def __init__(self):
    super(MainWindow, self).__init__()
    self.setWindowTitle('加载外部网页的例子')
    self.setGeometry(5,30,1355,730)
    self.browser=QWebEngineView()
    #加载外部的web界面
    self.browser.load(QUrl('https://3water.com'))
    self.setCentralWidget(self.browser)
if __name__ == '__main__':
  app=QApplication(sys.argv)
  win=MainWindow()
  win.show()
  app.exit(app.exec_())

运行效果图如下

python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法

在这里,我输入的url是我的博客地址,所以加载的也就是这个网址请求的web界面

QWebEngineView加载并显示嵌入的HTML代码

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *

class MainWindow(QMainWindow):
  def __init__(self):
    super(MainWindow, self).__init__()
    self.setWindowTitle('加载本地网页的例子')
    self.setGeometry(5,30,1355,730)
    self.browser=QWebEngineView()
    # #加载外部的web界面
    # url=r'index.html'
    # self.browser.load(QUrl(url))

    self.browser.setHtml('''<!DOCTYPE html>
                <html lang="en">
                <head>
                  <meta charset="UTF-8">
                  <title>Title</title>
                </head>
                <body>
                <h1>Hello PyQt5</h1>
                <h1>Hello PyQt5</h1>
                <h1>Hello PyQt5</h1>
                <h1>Hello PyQt5</h1>
                <h1>Hello PyQt5</h1>

                </body>
                </html>''')
    self.setCentralWidget(self.browser)
if __name__ == '__main__':
  app=QApplication(sys.argv)
  win=MainWindow()
  win.show()
  app.exit(app.exec_())

运行图片如下

python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法

注意使用QWebEngineView对象的setHTML()函数渲染HTml页面时,如果页面中使用的JavaScript代码超过2M,程序渲染就会失败

QWebEngineView调用JavaScript代码实例

通过QWebEnginePage类的runJavaScript(str,Callable)函数可以方便地实现PyQt和HTML、JavaScript的双向通信,也实现了python代码和Html,JavaScript代码的解耦,便于开发人员进行分工协作,在PyQt对象中,访问JavaScript的核心代码如下

QWebEnginePage.runJavaScript(str,Callable)

完整代码

import sys

from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton

# 创建一个 application实例
app = QApplication(sys.argv)
win = QWidget()
win.setWindowTitle('Web页面中的JavaScript与 QWebEngineView交互例子')

# 创建一个垂直布局器
layout = QVBoxLayout()
win.setLayout(layout)

# 创建一个 QWebEngineView 对象
view = QWebEngineView()
view.setHtml('''
 <html>
  <head>
   <title>A Demo Page</title>

   <script language="javascript">
    // Completes the full-name control and
    // shows the submit button
    function completeAndReturnName() {
     var fname = document.getElementById('fname').value;
     var lname = document.getElementById('lname').value;
     var full = fname + '' + lname;

     document.getElementById('fullname').value = full;
     document.getElementById('submit-btn').style.display = 'block';

     return full;
    }
   </script>
  </head>

  <body>
   <form>
    <label for="fname">First name:</label>
    <input type="text" name="fname" id="fname"></input>
    <br />
    <label for="lname">Last name:</label>
    <input type="text" name="lname" id="lname"></input>
    <br />
    <label for="fullname">Full name:</label>
    <input disabled type="text" name="fullname" id="fullname"></input>
    <br />
    <input style="display: none;" type="submit" id="submit-btn"></input>
   </form>
  </body>
 </html>
''')

# 创建一个按钮去调用 JavaScript代码
button = QPushButton('设置全名')


def js_callback( result ):
  print(result)


def complete_name():
  view.page().runJavaScript('completeAndReturnName();', js_callback)


# 按钮连接 'complete_name'槽,当点击按钮是会触发信号
button.clicked.connect(complete_name)

# 把QWebView和button加载到layout布局中
layout.addWidget(view)
layout.addWidget(button)

# 显示窗口和运行app
win.show()
sys.exit(app.exec_())

python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法

代码分析

在本例中,初始化一个QWebEngineView对象,对象名称View,然后通过View。page()函数获得一个QWebEnginePage对象,就可以访问整个web界面了。这个QWebEnginePage对象有一个异步的runJavaScript()函数,需要一个回调函数接收结果,其核心代码如下

def js_callback( result ):
  print(result)


def complete_name():
  view.page().runJavaScript('completeAndReturnName();', js_callback)

本文详细介绍了PyQt5浏览器控件QWebEngineView的使用方法,包括使用QWebEngineView调用JavaScript代码,更多关于PyQt5浏览器控件QWebEngineView的使用方法请查看下面的相关链接

Python 相关文章推荐
python 性能优化方法小结
Mar 31 Python
python 2.7.13 安装配置方法图文教程
Sep 18 Python
详解Python3 基本数据类型
Apr 19 Python
python中比较两个列表的实例方法
Jul 04 Python
python字典嵌套字典的情况下找到某个key的value详解
Jul 10 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
Aug 13 Python
Python获取统计自己的qq群成员信息的方法
Nov 15 Python
利用Python的sympy包求解一元三次方程示例
Nov 22 Python
python求一个字符串的所有排列的实现方法
Feb 04 Python
python3获取控制台输入的数据的具体实例
Aug 16 Python
详解查看Python解释器路径的两种方式
Oct 15 Python
Python中基础数据类型 set集合知识点总结
Aug 02 Python
python序列类型种类详解
Feb 26 #Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 #Python
Python中if有多个条件处理方法
Feb 26 #Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
Feb 26 #Python
Python处理PDF与CDF实例
Feb 26 #Python
用Python绘制漫步图实例讲解
Feb 26 #Python
Django单元测试中Fixtures的使用方法
Feb 26 #Python
You might like
解析左右值无限分类的实现算法
2013/06/20 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
PDO::beginTransaction讲解
2019/01/27 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
jquery ajax 登录验证实现代码
2009/09/23 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
js全屏显示显示代码的三种方法
2013/11/11 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
jquery密码强度校验
2015/12/02 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
微信小程序如何自定义table组件
2019/06/29 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
javascript实现评分功能
2020/06/24 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
python数据批量写入ScrolledText的优化方法
2018/10/11 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
使用celery和Django处理异步任务的流程分析
2020/02/19 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
高中毕业自我鉴定范文
2013/10/02 职场文书
辩论赛主持词
2014/03/18 职场文书
生日寄语大全
2014/04/08 职场文书
安全生产计划书
2014/05/04 职场文书
信用卡工资证明格式
2014/09/13 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书