python - 如何使用 qwebengine 制作选项卡式浏览器

标签 python python-3.x pyqt5 qwebview

我有一些 pyqt5 代码,我正在尝试制作选项卡式浏览器,以及当我单击 target _blank 链接时,它如何在带有该链接的新选项卡中打开。另外,由于我还是 PyQt5 的新手,并且正在练习这个项目,所以我需要一些帮助。在代码中,我有 3 个类,一个包含主窗口,一个包含 webview,一个包含网页。这是代码:

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) 中使用了一个类而不创建一个对象,您必须做的是通过实例使用相同的对象,如下所示:

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_())

关于python - 如何使用 qwebengine 制作选项卡式浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47948871/

相关文章:

python - 在哪里可以找到 __bytes__ 方法?

python - 有条件合并数据帧行

python - Pandas 获取一个数据框中列出的所有行,但不是另一个未排序的行

python - PyQtGraph:为什么对象总是在左下角

qt - PyQt:如何设置 QTreeView 的行高

python - 失败前提条件错误 : Attempting to use uninitialized value W

Python 嵌套循环三角形

python - 当为另一列指定一个条件时如何填充前向值?

Python 未从 PyPi 包中找到库(因此,dll)

python - 如何从 PyEphem 获取物体的地球惯性坐标或地心坐标?