python PyQt QtWebEngine实现本窗口跳转+ 新窗口跳转

python PyQt QtWebEngine实现本窗口跳转+ 新窗口跳转

重点讲解:

QtWebEngineView 创建的是一个以chrome内核的浏览窗口,当鼠标左键点击该窗口中的链接时候,没有响应(默认情况下),如果想实现响应就需要重载QtWebEngineView的createwindow(self,type)方法,或者QWebEnginePage的createWindow()方法。但是重载两个方法也很奇怪,你按照网上说的直接return self 一点作用没有。此时实际上当前page的urlchanged信号有了并且传递出一个url 这个 url就是你点击的url 然后setUrl就行了

不说了直接上代码
1.本窗口跳转页面

from PyQt5 import QtCore,QtGui,QtWidgets,QtWebEngineWidgets

class WebEngineView(QtWebEngineWidgets.QWebEngineView):
    def createWindow(self,QWebEnginePage_WebWindowType):
        page = WebEngineView(self)
        page.urlChanged.connect(self.on_url_changed)
        return page
    def on_url_changed(self,url):
        self.setUrl(url)
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = QtWidgets.QMainWindow()
    webbrowser = WebEngineView()
    webbrowser.load(QtCore.QUrl("https://www.baidu.com"))
    window.setCentralWidget(webbrowser)
    window.show()
    sys.exit(app.exec_())

2.新窗口中跳转新页面

from PyQt5 import QtCore,QtGui,QtWidgets,QtWebEngineWidgets
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        QtWidgets.QMainWindow.setFixedSize(self,800,400)
        self.webview = WebEngineView()
        self.webview.load(QtCore.QUrl("https://www.baidu.com"))
        self.setCentralWidget(self.webview)
class WebEngineView(QtWebEngineWidgets.QWebEngineView):
    windows = [] #创建一个容器存储每个窗口,不然会崩溃,因为是createwindow函数里面的临时变量
    def createWindow(self, QWebEnginePage_WebWindowType):
        newtab =   WebEngineView()
        newwindow= MainWindow()
        newwindow.setCentralWidget(newtab)
        newwindow.show()
        self.windows.append(newwindow)
        return newtab
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

至于具体的各个类的细节方法、信号等等就太多了需要自己去学

  • 对了有空的话,我给一篇安装pyqt5的助手,这个网上没有教程哦,我自己去下载doc然后修改里面的函数搞定的

你可能感兴趣的:(python模块,pyqt,Qtwebengine,页面跳转,本窗口,新窗口)