pyqt5的QWebEngineView 使用模板3

简介:

说明

在 QWebEngineView使用模板2的基础上,补充增加了一些功能。

一.支持视频播放

关键代码

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
################################################
#######创建主窗口
################################################
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("http://www.baidu.com"))
        self.create_tab(self.webview)


    #创建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)
    QCoreApplication.setAttribute(Qt.AA_UseSoftwareOpenGL)   #这句解决错误警告:ERROR:gl_context_wgl.cc(78)] Could not share GL contexts.
    the_mainwindow = MainWindow()
    the_mainwindow.show()
    sys.exit(app.exec_())

本文如有帮助,敬请留言鼓励。
本文如有错误,敬请留言改进。

目录
相关文章
|
安全 Linux 数据安全/隐私保护
Intel TME和MKTME技术解析
# 市场需求 人们对透明全内存加密这个功能的需求主要来自对机密和敏感数据的保护。普通RAM里面储存的数据,在掉电之后,一般都以为是彻底消失了。但其实在一些复杂的离线攻击下,这些数据仍然是能被恢复出来并导致泄密;而持久性存储器(即外存,包括磁盘、SSD、eMMC等)的数据更加容易泄露。这些设备可能有硬件锁机制的保护,但是用户其实希望的是更细粒度的保护,比如per进程/容器/VM级的。 Int
5725 0
Intel TME和MKTME技术解析
|
SQL 机器学习/深度学习 消息中间件
十大行业经典案例!Apache Flink 的 40 个最佳实践
如今,Apache Flink 行业应用几何?在降本增效的需求驱动下,企业如何实现数据与算力价值最大化?本文整理了 Flink 社区近一年的社区案例,并按照行业进行分类,供大家参考!
十大行业经典案例!Apache Flink 的 40 个最佳实践
|
27天前
|
机器学习/深度学习 人工智能 自然语言处理
AI Compass前沿速览:字节Seedream4.0、Qwen3-Max、EmbeddingGemma、OneCAT多模态、rStar2-Agent
AI Compass前沿速览:字节Seedream4.0、Qwen3-Max、EmbeddingGemma、OneCAT多模态、rStar2-Agent
AI Compass前沿速览:字节Seedream4.0、Qwen3-Max、EmbeddingGemma、OneCAT多模态、rStar2-Agent
|
8月前
|
机器学习/深度学习 人工智能 算法
ToddlerBot:告别百万经费!6000刀就能造人形机器人,斯坦福开源全套方案普及机器人研究
ToddlerBot 是斯坦福大学推出的低成本开源人形机器人平台,支持强化学习、模仿学习和零样本模拟到现实转移,适用于运动操作研究和多场景应用。
698 3
ToddlerBot:告别百万经费!6000刀就能造人形机器人,斯坦福开源全套方案普及机器人研究
|
小程序 项目管理 计算机视觉
软考高项备考经验分享
### 高级信息系统项目管理师备考经验概要 - 备考时间:建议3-6个月,每天2小时,周末4-6小时。 - 资料:用《信息系统项目管理师教程(第4版)》,配合视频课程(机构、淘宝、B站)。 - 综合理论:重点标记,多做题(如51CTO、希赛网、软考信管网题库),整理错题,记住常用英文词汇。 - 案例分析:重视计算,牢记公式,例如成本偏差(CV)、进度偏差(SV)等,多做练习。 - 论文写作:提前准备,理解10大管理过程,避免模板,利用真实项目或政府招标案例。 备考策略注重效率和针对性,论文准备尤为关键,案例和综合题型固定,需多练题掌握公式。
493 2
软考高项备考经验分享
|
缓存 前端开发 JavaScript
探索 Qt WebEngineWidgets:从底层原理到高级应用与技巧
探索 Qt WebEngineWidgets:从底层原理到高级应用与技巧
2070 0
【2024美国大学生数学建模竞赛】2024美赛E题 问题分析、数学模型、实现代码、完整论文
本文是关于2024美国大学生数学建模竞赛E题的预告,承诺在题目发布后提供问题分析、数学模型、实现代码和完整论文的逐步更新。
362 2
【2024美国大学生数学建模竞赛】2024美赛E题 问题分析、数学模型、实现代码、完整论文
|
12月前
|
SQL 安全 Linux
命令执行漏洞
命令执行漏洞
|
机器学习/深度学习 数据采集 Python
【机器学习】包裹式特征选择之基于模型的特征选择法
【机器学习】包裹式特征选择之基于模型的特征选择法
353 0
|
自然语言处理 搜索推荐 算法
Python小说阅读器制作教程
Python小说阅读器制作教程
406 0