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编程时利用wxPython来支持多线程的方法
Apr 07 Python
详解Python中列表和元祖的使用方法
Apr 25 Python
Python基于pygame实现的弹力球效果(附源码)
Nov 11 Python
Python 模板引擎的注入问题分析
Jan 01 Python
Python探索之爬取电商售卖信息代码示例
Oct 27 Python
PyQt5实现拖放功能
Apr 25 Python
使用python生成杨辉三角形的示例代码
Aug 29 Python
python 实现语音聊天机器人的示例代码
Dec 02 Python
python接口自动化(十六)--参数关联接口后传(详解)
Apr 16 Python
简单的Python调度器Schedule详解
Aug 30 Python
Windows下Anaconda安装、换源与更新的方法
Apr 17 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 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
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
PHP中利用sleep函数实现定时执行功能实现代码
2016/08/25 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
JavaScript 常用函数库详解
2009/10/21 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
JavaScript中模拟实现jsonp
2015/06/19 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
2015/10/29 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
layui实现文件或图片上传记录
2018/08/28 Javascript
Vue项目中配置pug解析支持
2019/05/10 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
python根据路径导入模块的方法
2014/09/30 Python
使用Python生成XML的方法实例
2017/03/21 Python
Django 使用Ajax进行前后台交互的示例讲解
2018/05/28 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
Django框架表单操作实例分析
2019/11/04 Python
python groupby 函数 as_index详解
2019/12/16 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
英国的屈臣氏:Boots博姿
2017/12/23 全球购物
群众路线领导对照材料
2014/08/23 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
大学生学期个人总结
2015/02/12 职场文书
2015年招生工作总结
2015/05/04 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
Python基础之常用库常用方法整理
2021/04/30 Python