如何使用 qwebengine 制作标签式浏览器 [英] how to make tabbed browser with qwebengine
问题描述
我有一些 pyqt5 代码,我正在尝试制作选项卡式浏览器,以及当我单击目标 _blank 链接时它如何在带有该链接的新选项卡中打开.另外,由于我还是 PyQt5 的新手并且通过这个项目练习,所以我需要一些帮助.在代码中我有 3 个类,一个包含主窗口,一个包含 webview,一个包含网页.代码如下:
I have some pyqt5 code that I am trying to make tabbed browser and how when I click target _blank link it opens in new tab with that link. Also, As I am still new to PyQt5 and practicing thorugh this project so I need some help.In the code I have 3 classes one holds mainwindow and one holds webview and one holds webpage. Here is the code:
class Ui_MainWindow(QMainWindow):
def __init__(self):
super(Ui_MainWindow, self).__init__()
self.setupUi(self)
def setupUi(self, MainWindow):
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setGeometry(QtCore.QRect(0, 75, width, height))
self.tabWidget.setObjectName("tabWidget")
self.loadUrl("https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_a_target")
def loadUrl(self, url):
self.b = HtmlView()
self.tabWidget.setCurrentIndex(self.tabWidget.addTab(self.b, 'loading...'))
self.b.load(QUrl(url))
class WebEnginePage(QWebEnginePage):
def __init__(self, parent=None):
super(WebEnginePage, self).__init__(parent)
def acceptNavigationRequest(self, url, _type, isMainFrame):
if (_type == QWebEnginePage.NavigationTypeLinkClicked):
Ui_MainWindow.loadUrl(Ui_MainWindow, url)
return True
return QWebEnginePage.acceptNavigationRequest(self, url, _type, isMainFrame)
class HtmlView(QWebEngineView):
def __init__(self, parent=None):
super(HtmlView, self).__init__()
self.setPage(WebEnginePage(self))
推荐答案
这些类是抽象的,也就是说,它们是无用的,但是我创建了一个类的对象,你在指令 Ui_MainWindow.loadUrl(Ui_MainWindow,url)
正在使用一个类而不创建一个对象,你必须做的是使用同一个对象通过我下面展示的实例:
The classes are abstractions, that is, they are useless but I create an object of the class and you in the instruction Ui_MainWindow.loadUrl(Ui_MainWindow, url)
are using a class without creating an object, what you must do is use the same object Through the instance as I show below:
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *
class TabWidget(QTabWidget):
def __init__(self, *args, **kwargs):
QTabWidget.__init__(self, *args, **kwargs)
url = QUrl("https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_a_target")
view = HtmlView(self)
view.load(url)
ix = self.addTab(view, "loading ...")
class HtmlView(QWebEngineView):
def __init__(self, *args, **kwargs):
QWebEngineView.__init__(self, *args, **kwargs)
self.tab = self.parent()
def createWindow(self, windowType):
if windowType == QWebEnginePage.WebBrowserTab:
webView = HtmlView(self.tab)
ix = self.tab.addTab(webView, "loading ...")
self.tab.setCurrentIndex(ix)
return webView
return QWebEngineView.createWindow(self, windowType)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
main = TabWidget()
main.show()
sys.exit(app.exec_())
这篇关于如何使用 qwebengine 制作标签式浏览器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!