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创建线程示例
May 06 Python
Python生成pdf文件的方法
Aug 04 Python
利用Python实现简单的相似图片搜索的教程
Apr 23 Python
Python导入oracle数据的方法
Jul 10 Python
Python3实现抓取javascript动态生成的html网页功能示例
Aug 22 Python
微信跳一跳辅助python代码实现
Jan 05 Python
Python使用smtp和pop简单收发邮件完整实例
Jan 09 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
Flask框架模板渲染操作简单示例
Jul 31 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
浅析Python 字符编码与文件处理
Sep 24 Python
使用Python画了一棵圣诞树的实例代码
Nov 27 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
isset和empty的区别
2007/01/15 PHP
phpmail类发送邮件函数代码
2012/02/20 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
PHP实现ftp上传文件示例
2014/08/21 PHP
PHP实现自动对图片进行滚动显示的方法
2015/03/12 PHP
php按单词截取字符串的方法
2015/04/07 PHP
PHP查询分页的实现代码
2017/06/09 PHP
用js实现的自定义的对话框的实现代码
2010/03/21 Javascript
IE下js调试工具Companion.JS
2010/10/15 Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
2013/08/30 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
jquery实现轮播图效果
2017/02/13 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
Python遍历字典方式就实例详解
2019/12/28 Python
pandas读取csv文件提示不存在的解决方法及原因分析
2020/04/21 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
python 图像插值 最近邻、双线性、双三次实例
2020/07/05 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
Linux文件系统类型
2012/02/15 面试题
行政主管岗位职责
2015/02/03 职场文书
三年级作文之小小梦想
2019/12/06 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python