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_())
本文如有幫助,敬請留言鼓勵。
本文如有錯誤,敬請留言改進。
相關文章
- pyqt5的QWebEngineView 使用模板1QTWebView
- Windows下QtCreator使用QWebEngineViewWindowsQTWebView
- pyqt5的下載進度條 實現模板QT
- QWebEngineView去除自帶CookieWebViewCookie
- 使用pyqt5記錄QT
- Python PyQT5的入門使用PythonQT
- pyqt5使用中的一些坑QT
- Flask——模板的使用Flask
- 【PyQt5】QListWidget 使用方法QT
- [PyQt5] QListWidget 使用方法QT
- 小程式模板的使用
- pyqt5的mdimainwindowQTAI
- PyQt5 GUI程式設計(元件使用)QTGUI程式設計元件
- 3、flask-模板渲染Flask
- PyQt5開發環境配置並使用QT開發環境
- 模板引擎使用詳解:包含公共模板
- Flask web開發(3):模板FlaskWeb
- 使用 PyQt5 實現圖片檢視器QT
- 使用PyQt5為YoloV5新增介面(一)QTYOLO
- 怎麼使用 pyqt5 的 textEdit 控制元件,實現拖拽功能?QT控制元件
- 【PyQt5】使用 QListWidget 實現 刪除 與 新增QT
- [PyQt5] 使用 QListWidget 實現 刪除 與 新增QT
- 小程式的模板與元件的基本使用元件
- 前端模板引擎doT.js的使用前端JS
- 小程式如何使用共用的WXML模板XML
- Django學習(二) 之 模板的使用Django
- python Django模板的使用方法PythonDjango
- extjs模板的使用:Ext.XTemplateJS
- pyqt5寫的摩斯密碼QT密碼
- 【Python進階-PyQt5】00搭建PyQt5環境PythonQT
- AS 使用 Flutter 程式碼模板Flutter
- Express 文件(使用模板引擎)Express
- Django之mako模板使用Django
- 免下載就能用的主圖模板,免費分享模板使用教程!
- PyQt5 概覽QT
- PyQT5繪圖QT繪圖
- PyQT5之QTreeViewQTView
- 開箱即用的Vite-Vue3工程化模板ViteVue