python - 单击外部 url 链接时窗口不会打开新窗口或选项卡

标签 python python-3.x pyqt pyqt5 qwebengineview

我需要使用 pyQt5 打开一个 URL。该页面有几个打开新窗口的链接。 pyQt5 为该 URL 打开一个窗口,但在单击应该打开一个新窗口的链接后不执行任何操作。 P.S 我正在使用 pyQt5.6

我已经在 Linux centOs 上试过了,但没有任何效果。

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://gmail.com"));
    w.show()
    sys.exit(app.exec_())

我希望它能在任何网页上点击 target='_blank' 时打开一个新窗口。

最佳答案

您必须覆盖 createWindow 方法并返回一个 QWebEngineView,但是对于不被分散的对象,它必须是另一个窗口的子窗口或者是具有更长生命周期的容器的一部分。

from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets

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

class HtmlView(QtWebEngineWidgets.QWebEngineView):
    def __init__(self, windows, *args, **kwargs):
        super(HtmlView, self).__init__(*args, **kwargs)
        self.setPage(WebEnginePage(self))
        self._windows = windows
        self._windows.append(self)

    def createWindow(self, _type):
        if QtWebEngineWidgets.QWebEnginePage.WebBrowserTab:
            v = HtmlView(self._windows)
            v.resize(640, 480)
            v.show()
            return v

if __name__ == '__main__':
    import sys

    app = QtWidgets.QApplication(sys.argv)
    windows = []
    w = HtmlView(windows)
    w.load(QtCore.QUrl("https://gmail.com"));
    w.show()
    sys.exit(app.exec_())

关于python - 单击外部 url 链接时窗口不会打开新窗口或选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55472415/

相关文章:

python-3.x - 在 aws lambda 中完成工作之前对请求的 200 ok 响应

python - pyqt:为 Qlabel 添加单击事件

python - 选择特定项目时组合框发出信号

python - 构建 PyQt 以与 Qt5 一起使用

python - 防止机器人访问托管在 GCloud 上的网站

python - 如何读取不受信任的证书以使用 Python 提取信息?

python - Tkinter 模块 - 程序将只运行然后停止并且不会打开窗口

python - 如何在Python中将单个字符组合到一个字符串中

python - 如何比较两个不相等的列表并将匹配元素值追加回第一个列表

python - FCM API 'Bad request 400' 错误