PyQt5的QWebEngineView使用示例


Posted in Python onOctober 20, 2020

一.支持视频播放

关键代码

self.settings().setAttribute(QWebEngineSettings.PluginsEnabled, True)  #支持视频播放

二.支持页面关闭请求

关键代码

self.page().windowCloseRequested.connect(self.on_windowCloseRequested)  #页面关闭请求

三.支持页面下载请求

关键代码

self.page().profile().downloadRequested.connect(self.on_downloadRequested) #页面下载请求

完整源码

【如下代码,完全复制,直接运行,即可使用】

import sys
import os
import datetime
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtWebEngineWidgets import QWebEngineView,QWebEngineSettings
 
# 调试窗口配置
# 如果不想自己创建调试窗口,可以使用Chrome连接这个地址进行调试
DEBUG_PORT = '5588'
DEBUG_URL = 'http://127.0.0.1:%s' % DEBUG_PORT
os.environ['QTWEBENGINE_REMOTE_DEBUGGING'] = DEBUG_PORT
 
################################################
#######创建主窗口
################################################
class MainWindow(QMainWindow):
  def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.setWindowTitle('My Browser')
    #self.showMaximized()
    self.setWindowFlags(Qt.FramelessWindowHint)
 
    #####创建tabwidget
    self.tabWidget = QTabWidget()
    self.tabWidget.setTabShape(QTabWidget.Triangular)
    self.tabWidget.setDocumentMode(True)
    self.tabWidget.setMovable(True)
    self.tabWidget.setTabsClosable(True)
    self.tabWidget.tabCloseRequested.connect(self.close_Tab)
    self.setCentralWidget(self.tabWidget)
 
    ####第一个tab
    self.webview = WebEngineView(self)  #self必须要有,是将主窗口作为参数,传给浏览器
    self.webview.load(QUrl("https://www.baidu.com"))
    self.create_tab(self.webview)
 
    #网页调试窗口
    self.inspector = QWebEngineView()
    self.inspector.setWindowTitle('Web Inspector')
    self.inspector.load(QUrl(DEBUG_URL))
    self.webview.loadFinished.connect(self.handleHtmlLoaded)    
 
  # 加载完成后显示调试网页
  def handleHtmlLoaded(self, ok):
    if ok:
      self.webview.page().setDevToolsPage(self.inspector.page())
      self.inspector.show()
 
  #创建tab
  def create_tab(self,webview):
    self.tab = QWidget()
    self.tabWidget.addTab(self.tab, "新标签页")
    self.tabWidget.setCurrentWidget(self.tab)
    #####
    self.Layout = QHBoxLayout(self.tab)
    self.Layout.setContentsMargins(0, 0, 0, 0)
    self.Layout.addWidget(webview)
 
  #关闭tab
  def close_Tab(self,index):
    if self.tabWidget.count()>1:
      self.tabWidget.removeTab(index)
    else:
      self.close()  # 当只有1个tab时,关闭主窗口
 
################################################
#######创建浏览器
################################################
class WebEngineView(QWebEngineView):
 
  def __init__(self,mainwindow,parent=None):
    super(WebEngineView, self).__init__(parent)
    self.mainwindow = mainwindow
    ##############
    self.settings().setAttribute(QWebEngineSettings.PluginsEnabled, True)   #支持视频播放
    self.page().windowCloseRequested.connect(self.on_windowCloseRequested)   #页面关闭请求
    self.page().profile().downloadRequested.connect(self.on_downloadRequested) #页面下载请求
 
  # 支持页面关闭请求
  def on_windowCloseRequested(self):
    the_index = self.mainwindow.tabWidget.currentIndex()
    self.mainwindow.tabWidget.removeTab(the_index)
 
 
  # 支持页面下载按钮
  def on_downloadRequested(self,downloadItem):
    if downloadItem.isFinished()==False and downloadItem.state()==0:
      ###生成文件存储地址
      the_filename = downloadItem.url().fileName()
      if len(the_filename) == 0 or "." not in the_filename:
        cur_time = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
        the_filename = "下载文件" + cur_time + ".xls"
      the_sourceFile = os.path.join(os.getcwd(), the_filename)
 
      ###下载文件
      # downloadItem.setSavePageFormat(QWebEngineDownloadItem.CompleteHtmlSaveFormat)
      downloadItem.setPath(the_sourceFile)
      downloadItem.accept()
      downloadItem.finished.connect(self.on_downloadfinished)
 
 
  # 下载结束触发函数
  def on_downloadfinished(self):
    js_string = '''
    alert("下载成功,请到软件同目录下,查找下载文件!"); 
    '''
    self.page().runJavaScript(js_string)
 
 
  # 重写createwindow()
  def createWindow(self, QWebEnginePage_WebWindowType):
    new_webview = WebEngineView(self.mainwindow)
 
    self.mainwindow.create_tab(new_webview)
 
    return new_webview
 
 
################################################
#######程序入门
################################################
if __name__ == "__main__":
  app = QApplication(sys.argv)
  the_mainwindow = MainWindow()
  the_mainwindow.show()
  sys.exit(app.exec())

以上就是PyQt5的QWebEngineView使用示例的详细内容,更多关于PyQt5的QWebEngineView的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python网络编程示例(客户端与服务端)
Apr 24 Python
python中正则表达式的使用详解
Oct 17 Python
Python基础教程之浅拷贝和深拷贝实例详解
Jul 15 Python
python实现根据文件关键字进行切分为多个文件的示例
Dec 10 Python
python3使用pandas获取股票数据的方法
Dec 22 Python
使用python模拟命令行终端的示例
Aug 13 Python
python-序列解包(对可迭代元素的快速取值方法)
Aug 24 Python
python异常处理和日志处理方式
Dec 24 Python
python读取csv文件指定行的2种方法详解
Feb 13 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
如何在 Matplotlib 中更改绘图背景的实现
Nov 26 Python
使用python如何删除同一文件夹下相似的图片
May 07 Python
Python测试框架:pytest学习笔记
Oct 20 #Python
如何快速一次性卸载所有python包(第三方库)呢
Oct 20 #Python
Python模块常用四种安装方式
Oct 20 #Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 #Python
编写python代码实现简单抽奖器
Oct 20 #Python
几款好用的python工具库(小结)
Oct 20 #Python
如何基于python实现年会抽奖工具
Oct 20 #Python
You might like
php跨域cookie共享使用方法
2014/02/20 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
JS、CSS加载中的小问题探讨
2013/11/26 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
jQuery 全选 全部选 反选 实现代码
2016/08/17 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
简述pm2常用命令集合及配置文件说明
2019/05/30 Javascript
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
[01:29:31]VP VS VG Supermajor小组赛胜者组第二轮 BO3第一场 6.2
2018/06/03 DOTA
python实现的各种排序算法代码
2013/03/04 Python
python3.3实现乘法表示例
2014/02/07 Python
python3实现暴力穷举博客园密码
2016/06/19 Python
Python callable()函数用法实例分析
2018/03/17 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
浅谈python之新式类
2018/08/12 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
常用的10个Python实用小技巧
2020/08/10 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
西班牙香水和化妆品购物网站:Arenal Perfumerías
2019/03/01 全球购物
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
C语言编程练习
2012/04/02 面试题
小学教师岗位职责
2013/11/25 职场文书
给老师的检讨书
2014/02/11 职场文书
2014年工人工作总结
2014/11/25 职场文书
单位计划生育责任书
2015/05/09 职场文书
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python
vue封装数字翻牌器
2022/04/20 Vue.js