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_())
本文如有帮助,敬请留言鼓励。
本文如有错误,敬请留言改进。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
ASP.NET Core MVC 设计模式 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core MVC 设计模式 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core MVC 设计模式 上一章节中,我们提到 ASP.NET Core 支持 MVC 开发模式,不知道大家对 MVC 设计模式是否了解,算了,不管了,本章节我们就来讲讲 MVC 设计模式吧。 MVC 设计模式 MVC ( 模型 - 视图 - 控制器 ) 设计模式作为一种设计模式, 实际上已经存在了几十年,并且已经用于许多不同的技术,从 Smalltalk 到 C ++ 到 Java 。 现在 C# 和 .NET 也使用它作为构建用户界面的一种设计模式 MVC 设计模式是软件应用程序用户界面层的流行设计模式 比较大型的程序,通常将 模型 - 视图 - 控制器 中的 UI 层与应用程序中的其它设计模式组合在一起,例如数据访问模式和消息传递模式 这些设计模式将一起构建完整的应用程序堆栈 MVC 设计模式将应用程序的用户界面 ( UI ) 分为以下三部分: 模型 - 描述正在使用的数据以及业务逻辑的一组类 视图 - 定义应用程序的 UI 将如何显示。这是一个纯...
- 下一篇
ASP.NET Core 视图 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 视图 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 视图 花了几章节,终于把 ASP.NET Core MVC 中的 C 控制器涉及的七七八八了,本章节我们来学习下 V,也就是视图部分。 ASP.NET Core MVC 应用程序中,没有任何内容像页面,并且在 URL 中指定路径时, 它也不包含与页面直接对应的任何内容。 ASP.NET Core MVC 应用程序中最接近页面的东西被称为视图 是不是很拗口,哈哈,页面就是一个服务器端返回的数据,但这个数据并不是直接存在的,而是由控制器、模型、视图三大部分相作用的结果。 这是因为,也是你知道的,在 ASP.NET MVC 应用程序中,所有传入的请求均由控制器处理,并将这些请求映射到控制器相应的方法上 控制器方法可能会返回一个视图,也可能执行其它类型的操作,例如重定向到另一个控制器方法上 如果使用 MVC 框架,最流行的创建 HTML 的方法是使用 ASP.NET MVC 的 Razor 视图引擎 为了使用 Razor 视图引擎,一个控制器方法将产生一个 View...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 设置Eclipse缩进为4个空格,增强代码规范
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题