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实现的一个简单LRU cache
Sep 26 Python
Python的Flask框架中web表单的教程
Apr 20 Python
菜鸟使用python实现正则检测密码合法性
Jan 05 Python
利用python实现命令行有道词典的方法示例
Jan 31 Python
浅谈python中真正关闭socket的方法
Dec 18 Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
python 实现读取csv数据,分类求和 再写进 csv
May 18 Python
python和php学习哪个更有发展
Jun 17 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
Jun 29 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 Python
Python自动化爬取天眼查数据的实现
Jun 15 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
自己做矿石收音机
2021/03/02 无线电
php 保留小数点
2009/04/21 PHP
解析htaccess伪静态的规则
2013/06/18 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
php array_pop 删除数组最后一个元素实例
2016/11/02 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
详解angular笔记路由之angular-router
2017/09/12 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
vue移动端弹框组件的实例
2018/09/25 Javascript
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
Python将json文件写入ES数据库的方法
2019/04/10 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
给水工程专业毕业生自荐信
2014/01/28 职场文书
运动会通讯稿50字
2014/01/30 职场文书
借款协议书范本
2014/04/22 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
深入理解Vue的数据响应式
2021/05/15 Vue.js