
在PyQt5中,可以使用PyQtWebEngine子產品快速定制專屬浏覽器,預設的PyQt5包中并不包含這個子產品,請使用指令:
pip install PyQtWebEngine
安裝這個子產品。
QWebEngineView
QWebEngineView類提供了一個用于檢視和編輯Web文檔部件,web view是Qt WebEngine網頁浏覽子產品的主要部件的元件。可以在各種應用程式中使用它來實時顯示Internet上的Web内容。
和其他Qt部件一樣,必須show()函數才可以顯示Web視圖,簡單的示例代碼如下:
webView = QWebEegineView(self)view.load(QUrl('http://qt-project.org/'))view.show()
QWebEegineView 常用函數:
- load(self, url): 加載指定的url并顯示。
- setHtml(self, html, baseUrl): 将網頁視圖的内容設定為指定的HTML内容。
- history(self): 傳回指向導航網頁視圖曆史的對象。
- icon(self): 獲得與目前檢視的頁面關聯的圖示。
- iconUrl(self): 獲得此屬性儲存與目前檢視的頁面關聯的圖示的URL。
- page(self): 傳回指向基礎網頁的對象。
- pageAction(self, action):傳回指向QAction的對象,該對象封裝了指定的Web操作action。
- selectedText(self):獲得目前標明的文本。。
- setPage(self, page): 使page成為Web視圖的新網頁。
- setUrl(self, url): 設定目前檢視的網頁的URL。
- setZoomFactor(self, factor): 設定視圖的縮放因子,有效值是從範圍内的0.25到5.0。預設因子是1.0。
- settings(self): 傳回指向視圖或頁面特定設定對象。
- title(self): 獲得HTML元素定義的頁面标題。
- triggerPageAction(self, action, checked):觸發指定的action。如果這是可檢查的操作,則假定為指定的checked狀态。
- url(self):獲得目前檢視的網頁的URL。
- zoomFactor(self): 傳回視圖的縮放因子。
- back(self): 用于通過導航連結建構的文檔清單中的上一個文檔。如果沒有以前的文檔,則不執行任何操作。
- forward(self): 用于通過導航連結建構的文檔清單中的下一個文檔。如果沒有下一個文檔,則不執行任何操作。
- reload(self): 重新加載目前文檔。
- stop(self): 停止加載文檔。
QWebEegineView 常用信号:
- iconChanged(self, icon): 當與視圖關聯的圖示(“收藏夾”)更改時,将發出此信号。新圖示由icon指定。
- iconUrlChanged(self, url): 當與視圖關聯的圖示(“圖示”)的URL更改時,将發出此信号。新URL由url指定。
- loadFinished(self, ok): 頁面加載完成後發出此信号。ok将訓示加載成功還是發生錯誤。
- loadProgress(self, progress): 每當Web視圖中的某個元素完成加載(例如嵌入式圖像或腳本)時,都會發出此信号。是以,它跟蹤加載Web視圖的總體進度。目前值由progress提供,範圍為0到100,這是QProgressBar的預設範圍。
- loadStarted(self): 當頁面開始新的加載時,将發出此信号。
- renderProcessTerminted(self, terminationStatus,exitCode): 當渲染過程以非零退出狀态終止時,将發出此信号。terminationStatus是程序的終止狀态,而exitCode是程序終止的狀态代碼。
- selectionChanged(self): 選擇更改時,将發出此信号。
- titleChanaged(self, title): 每當視圖示題更改時,都會發出此信号。
- urlChanged(self, url): 視圖的URL更改時,将發出此信号。
簡單的浏覽器
代碼示範如何定制一個簡單的浏覽器,備注(QWebEngine 子產品的核心使用的Chorme, 測試程式在win10下運作正常,在Ubutun下需要加開關 --no-sandbox)。完整代碼如下:
資源檔案:resource.qrc
images/back.png images/next.png images/close.png images/reload.png
代碼檔案:
import sysfrom PyQt5.QtCore import Qt, QUrl, QSizefrom PyQt5.QtGui import QIconfrom PyQt5.QtWidgets import (QApplication, QMainWindow, QLineEdit, QMenuBar, QToolBar, QMenu, QAction)from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEngineSettings import resource_rc default_url = 'https://www.toutiao.com/i6856673250190033415/' class WebEngineView(QWebEngineView): windowList = [] class DemoBrowser(QMainWindow): def __init__(self, parent=None): super(DemoBrowser, self).__init__(parent) # 設定視窗标題 self.setWindowTitle('實戰Qt for Python: QWeEngineView示範') # 設定視窗大小 self.resize(640, 480) webSettings = QWebEngineSettings.globalSettings() webSettings.setAttribute(QWebEngineSettings.JavascriptEnabled, True) webSettings.setAttribute(QWebEngineSettings.PluginsEnabled, True) webSettings.setAttribute(QWebEngineSettings.JavascriptCanOpenWindows, True) self.browser = QWebEngineView(self) self.setCentralWidget(self.browser) self.initBar() self.browser.load(QUrl(default_url)) def initBar(self): #菜單條 menuBar = self.menuBar() menuFile = menuBar.addMenu('檔案(&F)') actionExit = QAction('退出(&X)', self) actionExit.triggered.connect(QApplication.instance().quit) menuFile.addAction(actionExit) #浏覽器工具條 navBar = QToolBar('Navigation') navBar.setIconSize(QSize(16, 16)) self.addToolBar(navBar) self.editUrl = QLineEdit() #位址欄能響應回車按鍵信号 self.editUrl.returnPressed.connect(self.navigateToUrl) navBar.addAction(QAction(QIcon(':/images/back.png'), 'Back', self, triggered=self.browser.back)) navBar.addAction(QAction(QIcon(':/images/next.png'), 'Forward', self, triggered=self.browser.forward)) navBar.addAction(QAction(QIcon(':/images/close.png'), 'Stop', self, triggered=self.browser.stop)) navBar.addAction(QAction(QIcon(':/images/reload.png'), 'Reload', self, triggered=self.browser.reload)) navBar.addSeparator() navBar.addWidget(self.editUrl) #浏覽器相應url位址的變化 self.browser.urlChanged.connect(self.renewUrl) def navigateToUrl(self): url = QUrl(self.editUrl.text()) if url.scheme() == '': url.setScheme('http') self.browser.setUrl(url) def renewUrl(self, url): # 将目前網頁的連結更新到位址欄 self.editUrl.setText(url.toString()) self.editUrl.setCursorPosition(0) if __name__ == '__main__': app = QApplication(sys.argv) window = DemoBrowser() window.show() sys.exit(app.exec())
運作效果如下圖:
使用QWebEngineView實作一個簡單的浏覽器
本文知識點
- QWebEngine子產品不包含在PyQt5預設包中,需要單獨安裝。
- QWebEngine子產品使用Chrome核心。
- 如何建構一個簡單的浏覽器。
前一篇: 實戰PyQt5: 132-一個輕量級的地圖應用
請多多關注,評論,收藏,點贊,和轉發。