pyqt5的QWebEngineView 使用方法


說明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("https://www.baidu.com"))
    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_())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM