PyQt5 QWebEngineView点击链接打开新页面问题 | 您所在的位置:网站首页 › 新网页不能自动跳转 › PyQt5 QWebEngineView点击链接打开新页面问题 |
PyQt5 QWebEngineView点击链接打开新页面问题
用QWebEngineView展示web界面,点击链接后没反应,上网查到了用urlChanged信号,但是这个是同一页面跳转的时候才会改变URL,打开新页面不会改变当前页的URL,自然也没有这个信号; 打开新页面会调用QWebEngineView中的createWindow这个函数,所以可以重写这个函数达到目的,参照https://tieba.baidu.com/p/5136101813?red_tag=0301629953能够打开一个新的窗口显示新web 还有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) |
CopyRight 2018-2019 实验室设备网 版权所有 |