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然后修改里面的函数搞定的
版权声明:本文为qq_37175419原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。