如果目标_blank,QWebengine打开createwindow

时间:2017-12-20 01:11:35

标签: python pyqt5 qwebview

我有一个代码,如果链接是目标_blank,则假设打开/创建新窗口但是,它没有按预期执行,并且没有给予任何操作作为回报。

以下是代码:

class MyPage(QWebEnginePage):
    def __init__(self, parent=None):
        super(MyPage, self).__init__(parent)
    def triggerAction(self, action, checked=False):
        if action == QWebEnginePage.OpenLinkInNewWindow:
            self.createWindow(QWebEnginePage.WebBrowserWindow)

        return super(MyPage, self).triggerAction(action, checked)


class MyWindow(QtWebEngineWidgets.QWebEngineView):
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)

        self.myPage = MyPage(self)

        self.setPage(self.myPage)

    def createWindow(self, windowType):
        if windowType == QWebEnginePage.WebBrowserWindow:
            self.webView = MyWindow()
            self.webView.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)

            return self.webView

        return super(MyWindow, self).createWindow(windowType)

if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    app.setApplicationName('MyWindow')

    main = MyWindow()
    main.show()
    main.load(QUrl("https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_a_target"))

    sys.exit(app.exec_())

想知道为什么它不起作用,如果可能的话。

谢谢, 最大

1 个答案:

答案 0 :(得分:1)

如果您在任何浏览器中直接测试该链接,您会看到该操作是为了创建一个新标签,因此windowType适用于QWebEnginePage::WebBrowserTab类型,那时我们创建新标签窗口并显示如下所示:

class MyWindow(QWebEngineView):
    [...]
    def createWindow(self, windowType):
        if windowType == QWebEnginePage.WebBrowserTab:
            self.webView = MyWindow()
            self.webView.setAttribute(Qt.WA_DeleteOnClose, True)
            self.webView.show()
            return self.webView
        return super(MyWindow, self).createWindow(windowType)