QWebEngineView历史记录canGoForward / canGoBack仅在以下三个项目后有效

问题描述

我有一个简单的应用程序,其中根据访问的网页的历史记录启用/禁用后退和前进按钮。为此,我发现了canGoForwardcanGoBack函数 QWebEngineHistory中的一个。但是,仅在历史记录中至少包含三个项目之后,这些函数才会返回True。通常,浏览器会在访问第二个不同页面后立即工作。

这应该像那样工作吗?我有什么办法可以将其更改为2个网页吗?我看过QWebEnginesettings,但与此无关。

这是一个可行的示例:

#!/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.setIcon(QIcon('stock_left.png'))
        self.backBtn.clicked.connect(self.back)
        self.toolBar.addWidget(self.backBtn)

        self.forBtn = QPushButton(self)
        self.forBtn.setEnabled(False)
        # self.forBtn.setIcon(QIcon('stock_right.png'))
        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)

        print(self.webEngineView.history().backItem().url())
        print(self.webEngineView.history().forwardItem().url())

        self.setGeometry(300,300,500,400)
        self.setwindowTitle('QWebEnginePage')
        self.show()

        # self.webEngineView.page().urlChanged.connect(self.urlChanged)

    def onLoadFinished(self):

        print(dir(self.webEngineView.history()))
        print('load finished')
        # print(self.webEngineView.history().backItem().url())
        # print(self.webEngineView.history().forwardItem().url())
        # print(self.webEngineView.history().backItem())
        # print(self.webEngineView.history().forwardItem())
        # print(self.webEngineView.history().count())
        # print(self.webEngineView.history().items())
        # print(self.webEngineView.history().canGoForward())
        # print(self.webEngineView.history().canGoBack())

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)