完整代码如下:

#!/usr/bin/env python
#-*- coding: utf-8 -*- 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_())

最新文章

  1. AngularJs:Service、Factory、Provider依赖注入使用与区别
  2. DTD约束的校验工具安装及检验(Iexmltls工具)
  3. Servlet中读取参数的几种方式
  4. Using the viewport meta tag to control layout on mobile browsers
  5. Android添加标题进度条
  6. JavaScript(暂时弃坑...)
  7. springMVC入门配置及helloworld实例
  8. time元素定义的格式
  9. Python类方法、静态方法与实例方法
  10. linux 最大文件描述符
  11. nginx系列9:HTTP反向代理请求处理流程
  12. ZooKeeper-配置 zoo.cfg
  13. hdu 1238 Substrings(kmp+暴力枚举)
  14. JS膏集01
  15. [AGC001 E] BBQ Hard
  16. Git的上传步骤
  17. ArrayList vs LinkedList 空间占用
  18. [转]获取app的内部储存路径
  19. DIOCP开源项目-高效稳定的服务端解决方案(DIOCP + 无锁队列 + ZeroMQ + QWorkers) 出炉了
  20. 为什么JS事件函数里面都有一个参数(ev)?

热门文章

  1. 洛谷 P1873 【砍树】
  2. Android Studio中每次打开工程Gradle sync龟速解决办法
  3. 【13NOIP提高组】转圈游戏(信息学奥赛一本通 1875)(洛谷 1965)
  4. 《jmeter接口自动化与性能实战-飞天小子.pdf》
  5. WPF——OXY绘图_old
  6. centos7安装hadoop2.7.7
  7. [技术博客] 【vagrant】硬盘扩容
  8. Git和Github详细教程
  9. 【转发】SqlServer数据库表生成C# Model实体类SQL语句
  10. 移除 WordPress 自动加载的 jQuery,使用自定义 jQuery 版本