【问题标题】:Make any link (even _blank) open in same window using QWebEngine使用 QWebEngine 在同一窗口中打开任何链接(甚至 _blank)
【发布时间】:2018-06-02 07:03:02
【问题描述】:

我有这段代码应该访问/跟踪我在同一窗口中单击的任何链接,即使它通常会在新窗口中打开。这将不必右键单击,然后从上下文菜单中选择“关注链接”。由于某种原因,它没有按预期工作。

代码如下:

from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QDesktopServices
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage


class WebEnginePage(QWebEnginePage):
    def acceptNavigationRequest(self, url,  _type, isMainFrame):
        if _type == QWebEnginePage.NavigationTypeLinkClicked:
            return True
        return QWebEnginePage.acceptNavigationRequest(self, url,  _type,      isMainFrame)

class HtmlView(QWebEngineView):
    def __init__(self, *args, **kwargs):
        QWebEngineView.__init__(self, *args, **kwargs)
        self.setPage(WebEnginePage(self))

if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    w = HtmlView()
    w.load(QUrl("https://yahoo.com"));
    w.show()
    sys.exit(app.exec_())

【问题讨论】:

    标签: python hyperlink pyqt5 qwebengineview


    【解决方案1】:

    如果您希望链接始终在同一个窗口中打开,您可以重新实现createWindow 方法,使其返回相同的视图:

    class HtmlView(QWebEngineView):
        def createWindow(self, wintype):
            return self
    

    wintype 参数提供有关正在请求的窗口类型的信息。您可能希望以不同的方式处理对话框窗口。

    请注意,您的示例中的 WebEnginePage 子类不需要此功能。

    【讨论】:

    • 它可以工作,但我在 Qmainwindow 的中心小部件中有 webengineview,所以我将如何使其工作。我试图返回 self.widget 而不是 self 但没有用。
    • @Maxwe11。你不应该改变任何东西——它必须是return self。必须有一个单独的QWebEngineView 子类,正如我的回答中所示。创建HtmlView 的实例并将其设置为QMainWindow 的中心小部件。
    • 完成了,但还有一个问题,当它创建窗口时,后面的历史记录不再可访问。还有其他方法吗?我如何才能在 qwebengine 的上下文菜单中模仿以下链接?
    猜你喜欢
    • 2019-07-22
    • 2016-02-15
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2012-11-06
    相关资源
    最近更新 更多