PyQt5 QWebEngineView点击链接打开新页面问题

PyQt5 QWebEngineView点击链接打开新页面问题

用QWebEngineView展示web界面,点击链接后没反应,上网查到了用urlChanged信号,但是这个是同一页面跳转的时候才会改变URL,打开新页面不会改变当前页的URL,自然也没有这个信号;

打开新页面会调用QWebEngineView中的createWindow这个函数,所以可以重写这个函数达到目的,参照https://tieba.baidu.com/p/5136101813?red_tag=0301629953能够打开一个新的窗口显示新web
PyQt5 QWebEngineView点击链接打开新页面问题_第1张图片

还有https://www.cnblogs.com/Netsharp/p/9260862.html新建了一个窗口,和上面的效果应该一样。

https://blog.csdn.net/v6543210/article/details/89969557这个使得web能够在当前窗口显示


QWebEngineView *WebView::createWindow(QWebEnginePage::WebWindowType type)
{
 
 
    return this;
}

可是上面找到的例子都是C++的,没看到python的,我在python中使用return self不行,自己新建窗口显示的话,会显示空白的页面,查看到当前页面的URL是空的。我的错误代码如下:

from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage
from PyQt5 import QtCore
from PyQt5.QtCore import Qt


class MyWebView(QWebEngineView):

    def createWindow(self, QWebEnginePage_WebWindowType):
           newWeb = MyWebView(self)
           newWeb.setGeometry(QtCore.QRect(0, 0, 300, 150))  # 设置大小
           newWeb.show()
           return

问题就是URL是空的,没传进来,找了很久,后来在https://stackoverflow.com/questions/47897467/qwebengine-open-createwindow-if-target-blank上面发现了答案,他是把newWeb设置成了MyWebView的类变量,这样才能传递点击的URL,代码如下:

    def createWindow(self, QWebEnginePage_WebWindowType):
        if QWebEnginePage_WebWindowType == QWebEnginePage.WebBrowserTab:
            self.newWeb = MyWebView(self)
            # self.newWeb = MyWebView()  # 不认self为父,就会在新窗口显示,认self作父就能在当前窗口显示
            self.newWeb.setAttribute(Qt.WA_DeleteOnClose, True)  # 加上这个属性能防止Qt Qtwebengineprocess进程关不掉导致崩溃
            self.newWeb.setGeometry(QtCore.QRect(0, 0, 300, 150))
            self.newWeb.show()
            return self.newWeb
        return super(MyWebView, self).createWindow(QWebEnginePage_WebWindowType)

你可能感兴趣的:(图形化界面,python笔记,python,qt)