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错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
Aug 22 Python
Python连接PostgreSQL数据库的方法
Nov 28 Python
Python探索之Metaclass初步了解
Oct 28 Python
Python之多线程爬虫抓取网页图片的示例代码
Jan 10 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
Jul 10 Python
pycharm远程linux开发和调试代码的方法
Jul 17 Python
pandas 层次化索引的实现方法
Jul 06 Python
python同步两个文件夹下的内容
Aug 29 Python
浅谈Python中文件夹和python package包的区别
Jun 01 Python
Python paramiko使用方法代码汇总
Nov 20 Python
python基础入门之普通操作与函数(三)
Jun 13 Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 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
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
浅析php数据类型转换
2014/01/09 PHP
Zend Framework框架实现类似Google搜索分页效果
2016/11/25 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
jquery json 实例代码
2010/12/02 Javascript
jQuery代码优化 选择符篇
2011/11/01 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
python判断windows隐藏文件的方法
2014/03/21 Python
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
在Python中使用dict和set方法的教程
2015/04/27 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
pycharm安装和首次使用教程
2018/08/27 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
python实现图片上添加图片
2019/11/26 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
Python turtle画图库&amp;&amp;画姓名实例
2020/01/19 Python
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
如何将字串String转换成整数int
2015/02/21 面试题
初中优秀学生评语
2014/12/29 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
技术员岗位职责
2015/02/04 职场文书
劳资员岗位职责
2015/02/13 职场文书
2016中秋节晚会开场白
2015/11/26 职场文书
《惊弓之鸟》教学反思
2016/02/20 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
Mysql排序的特性详情
2021/11/01 MySQL
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL