PyQt QWebEngineView
最后修改于 2023 年 8 月 24 日
在本文中,我们将展示如何使用 QWebEngineView。
源代码可在 PyQt-Examples 代码库中找到。访问 ,阅读 PyQt5 教程,或列出所有 PyQt 教程。
PyQt QWebEngineView
QWebEngineView 是 Qt WebEngine 网页浏览模块的主要窗口部件组件。它用于显示 Web 内容。page 函数返回一个网页对象的引用。
QWebEnginePage 提供了一个用于查看和编辑 Web 文档的对象。
qtwebengine 必须单独安装。
$ sudo apt install python3-pyqt5.qtwebengine
此命令在基于 Debian 的 Linux 上安装 qtwebengine。
$ sudo pip install pyqtwebengine
通过 pip 工具安装的 qtwebengine。
PyQt QWebEngineView 简单示例
QWebEngineView 的 setHtml 方法将 Web 视图的内容设置为指定的 HTML 内容。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Home page</title>
</head>
<body>
<p>
This is a simple HTML page.
</p>
</body>
</html>
我们使用这个简单的 HTML 文档进行显示。
#!/usr/bin/python
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
vbox = QVBoxLayout(self)
self.webEngineView = QWebEngineView()
self.loadPage()
vbox.addWidget(self.webEngineView)
self.setLayout(vbox)
self.setGeometry(300, 300, 350, 250)
self.setWindowTitle('QWebEngineView')
self.show()
def loadPage(self):
with open('test.html', 'r') as f:
html = f.read()
self.webEngineView.setHtml(html)
def main():
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
在这个示例中,我们在一个 PyQt5 应用程序中显示一个简单的 HTML 文档。
self.webEngineView = QWebEngineView()
创建 QWebEngineView。
def loadPage(self):
with open('test.html', 'r') as f:
html = f.read()
self.webEngineView.setHtml(html)
我们打开 HTML 文档,并使用 setHtml 将文档内容设置到 Web 视图中。
PyQt QWebEngineView 导出为 PDF
printToPdf 函数将网页导出为 PDF 文件。
#!/usr/bin/python
import sys
from PyQt5.QtWidgets import (QHBoxLayout, QPushButton, QWidget,
QApplication, QVBoxLayout, QMessageBox)
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
vbox = QVBoxLayout(self)
hbox = QHBoxLayout()
self.webEngineView = QWebEngineView()
self.loadPage()
expBtn = QPushButton('Export', self)
expBtn.clicked.connect(self.onClicked)
hbox.addWidget(expBtn)
vbox.addWidget(self.webEngineView)
vbox.addLayout(hbox)
self.setLayout(vbox)
self.setGeometry(300, 300, 350, 250)
self.setWindowTitle('QWebEngineView')
self.show()
def onClicked(self):
self.webEngineView.page().printToPdf('myfile.pdf')
QMessageBox.information(self, 'info', 'page exported')
def loadPage(self):
with open('test.html', 'r') as f:
html = f.read()
self.webEngineView.setHtml(html)
def main():
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
在这个示例中,我们将当前网页导出为 PDF 文件,并将其保存在当前工作目录中。
self.webEngineView.page().printToPdf('myfile.pdf')
我们使用 page 函数获取当前页面的引用,并使用 printToPdf 函数将其导出并保存。
PyQt QWebEngineView 前进和后退
在下面的示例中,我们实现了前进和后退按钮。canGoBack 和 canGoForward 告诉我们是否存在先前和后续的会话历史记录条目。
#!/usr/bin/python
import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import (QApplication, QLineEdit, QMainWindow,
QPushButton, QToolBar)
from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineView
class Example(QMainWindow):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
self.toolBar = QToolBar(self)
self.addToolBar(self.toolBar)
self.backBtn = QPushButton(self)
self.backBtn.setEnabled(False)
self.backBtn.setIcon(QIcon(':/qt-project.org/styles/commonstyle/images/left-32.png'))
self.backBtn.clicked.connect(self.back)
self.toolBar.addWidget(self.backBtn)
self.forBtn = QPushButton(self)
self.forBtn.setEnabled(False)
self.forBtn.setIcon(QIcon(':/qt-project.org/styles/commonstyle/images/right-32.png'))
self.forBtn.clicked.connect(self.forward)
self.toolBar.addWidget(self.forBtn)
self.address = QLineEdit(self)
self.address.returnPressed.connect(self.load)
self.toolBar.addWidget(self.address)
self.webEngineView = QWebEngineView(self)
self.setCentralWidget(self.webEngineView)
self.webEngineView.page().urlChanged.connect(self.onLoadFinished)
self.webEngineView.page().titleChanged.connect(self.setWindowTitle)
self.webEngineView.page().urlChanged.connect(self.urlChanged)
self.setGeometry(300, 300, 500, 400)
self.setWindowTitle('QWebEnginePage')
self.show()
def onLoadFinished(self):
if self.webEngineView.history().canGoBack():
self.backBtn.setEnabled(True)
else:
self.backBtn.setEnabled(False)
if self.webEngineView.history().canGoForward():
self.forBtn.setEnabled(True)
else:
self.forBtn.setEnabled(False)
def load(self):
url = QUrl.fromUserInput(self.address.text())
if url.isValid():
self.webEngineView.load(url)
def back(self):
self.webEngineView.page().triggerAction(QWebEnginePage.Back)
def forward(self):
self.webEngineView.page().triggerAction(QWebEnginePage.Forward)
def urlChanged(self, url):
self.address.setText(url.toString())
def main():
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
我们有一个带有前进和后退按钮的工具栏。按钮旁边是地址栏。当我们在地址栏中输入其地址时,会加载一个网页。
self.backBtn = QPushButton(self) self.backBtn.setEnabled(False)
起初,历史记录中没有任何项目;因此,按钮是禁用的。
self.address = QLineEdit(self) self.address.returnPressed.connect(self.load) self.toolBar.addWidget(self.address)
按下 Enter/Return 键后,我们加载地址栏中的页面。地址栏是一个 QLineEdit。
self.webEngineView.page().urlChanged.connect(self.onLoadFinished)
页面加载后,我们检查历史记录中是否有项目,并相应地启用或禁用按钮。
self.webEngineView.page().titleChanged.connect(self.setWindowTitle)
这一行将窗口标题更新为网页的标题。
self.webEngineView.page().urlChanged.connect(self.urlChanged)
当我们在历史记录中后退或前进时,我们确保地址栏得到更新。
def onLoadFinished(self):
if self.webEngineView.history().canGoBack():
self.backBtn.setEnabled(True)
else:
self.backBtn.setEnabled(False)
if self.webEngineView.history().canGoForward():
self.forBtn.setEnabled(True)
else:
self.forBtn.setEnabled(False)
onLoadFinished 检查我们是否可以在历史记录中后退或前进。按钮会相应地被启用/禁用。
def load(self):
url = QUrl.fromUserInput(self.address.text())
if url.isValid():
self.webEngineView.load(url)
在 load 函数中,我们从地址栏获取网页,并检查该页面是否为有效的 URL。如果有效,则使用 QWebEngineView 的 load 函数加载页面。
def back(self):
self.webEngineView.page().triggerAction(QWebEnginePage.Back)
要后退,我们触发 QWebEnginePage.Back 动作。
def forward(self):
self.webEngineView.page().triggerAction(QWebEnginePage.Forward)
要前进,我们触发 QWebEnginePage.Forward 动作。
在本文中,我们介绍了 PyQt 的 QWebEngineView。
作者
列出所有 PyQt 教程。