pyqt5的QWebEngineView 使用模板1

karspb發表於2021-09-09

說明1:關於QWebEngineView

pyqt5 已經拋棄 QtWebKit和QtWebKitWidgets,而使用最新的QtWebEngineWidgets。
QtWebEngineWidgets,是基於chrome瀏覽器核心引擎的。

說明2:關於左鍵點選頁面跳轉

其中,最讓糾結的就是實現左鍵點選頁面跳轉了。
在chrome瀏覽器上,有些頁面,左鍵點選,會直接建立一個新的tab來呈現網頁。
在使用QWebEngineView時,如果不做特殊處理,這樣的左鍵點選,是根本沒有反應的。
那怎麼辦?就需要重寫QWebEngineView的createWindow方法。

說明3:關於createWindow方法重寫

在重寫QWebEngineView的createWindow方法時,又有兩種寫法。
第一種,是直接在本視窗新建tab的方式。 (不推薦使用這種方式)
注:這種方式有個問題,因為新建的tab覆蓋了原來的tab,所以,原來tab的所有資訊都找不到了,如瀏覽,賬號,密碼等。

class WebEngineView(QWebEngineView):
    # 重寫createwindow()
    def createWindow(self, QWebEnginePage_WebWindowType):
        return self

第二種,就是新建視窗的方式了。程式碼如下。(推薦使用這種方式)

【如下程式碼,完全複製,直接執行,即可使用】

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtWebEngineWidgets import QWebEngineView


################################################
#######建立主視窗
################################################
class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setWindowTitle('My Browser')
        self.showMaximized()

        self.webview = WebEngineView()
        self.webview.load(QUrl(""))
        self.setCentralWidget(self.webview)




################################################
#######建立瀏覽器
################################################
class WebEngineView(QWebEngineView):
    windowList = []

    # 重寫createwindow()
    def createWindow(self, QWebEnginePage_WebWindowType):
        new_webview =   WebEngineView()
        new_window = MainWindow()
        new_window.setCentralWidget(new_webview)
        #new_window.show()
        self.windowList.append(new_window)  #注:沒有這句會崩潰!!!
        return new_webview


################################################
#######程式入門
################################################
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())


本文如有幫助,敬請留言鼓勵。
本文如有錯誤,敬請留言改進。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2001/viewspace-2813129/,如需轉載,請註明出處,否則將追究法律責任。

相關文章