QWebEngineView历史canGoForward/canGoBack仅在三个项目后工作

2024-09-30 10:33:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这应该是这样工作的吗?我有没有办法把它改成两个网页?我已经看过了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()

Tags: fromimportselfurladdressdefconnecthistory

热门问题