博客说明python
文章所涉及的资料来自互联网整理和我的总结,意在于我的学习和经验汇总,若有什么地方侵权,请联系本人删除,谢谢!
首先咱们须要的是咱们的开发环境,我使用的是python 3.8.2和pyqt 5.14.2,由于有强迫症,因此喜欢使用最新版的git
这是新版使用的web浏览器引擎,更加的贴近谷歌浏览器,好像是须要单独安装,我就是这样的github
pip3 install QtWebEngineWidgets
作这个的时候遇到好多坑,好比在多个tab里面打开页面,要使用这个QTabWidget,这个不用咱们再去下载了,已经集成了web
这个搞了我半天,我以前还一直觉得是跨域的问题,实际上是这个机制的问题,须要重写createWindow方法跨域
# 建立浏览器,重写重写createwindow方法实现页面链接的点击跳转 class WebEngineView(QWebEngineView): def __init__(self, mainwindow, parent=None): super(WebEngineView, self).__init__(parent) self.mainwindow = mainwindow # 重写createwindow() def createWindow(self, QWebEnginePage_WebWindowType): new_webview = WebEngineView(self.mainwindow) self.mainwindow.create_tab(new_webview) return new_webview
而后大致就是一些页面的布局,这个可使用Qt Designer,能够自动转化成为咱们的py代码浏览器
而后就是一些前进,后退,刷新,中止的方法网络
# -*- coding: utf-8 -*- # @Author: dshj # @Date : 2020/04/26 import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWebEngineWidgets import QWebEngineView # 建立主窗口 class MainWindow(QMainWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 设置窗口标题 self.setWindowTitle('简易浏览器') # 设置窗口大小900*600 self.resize(1300, 700) self.show() # 建立tabwidget(多标签页面) self.tabWidget = QTabWidget() self.tabWidget.setTabShape(QTabWidget.Triangular) self.tabWidget.setDocumentMode(True) self.tabWidget.setMovable(True) self.tabWidget.setTabsClosable(True) self.tabWidget.tabCloseRequested.connect(self.close_Tab) self.setCentralWidget(self.tabWidget) # 第一个tab页面 self.webview = WebEngineView(self) # self必需要有,是将主窗口做为参数,传给浏览器 self.webview.load(QUrl("http://www.baidu.com")) self.create_tab(self.webview) # 使用QToolBar建立导航栏,并使用QAction建立按钮 # 添加导航栏 navigation_bar = QToolBar('Navigation') # 设定图标的大小 navigation_bar.setIconSize(QSize(16, 16)) # 添加导航栏到窗口中 self.addToolBar(navigation_bar) # QAction类提供了抽象的用户界面action,这些action能够被放置在窗口部件中 # 添加前进、后退、中止加载和刷新的按钮 back_button = QAction(QIcon('icons/houtui.png'), 'Back', self) next_button = QAction(QIcon('icons/qianjin.png'), 'Forward', self) stop_button = QAction(QIcon('icons/close.png'), 'stop', self) reload_button = QAction(QIcon('icons/shuaxin.png'), 'reload', self) # 绑定事件 back_button.triggered.connect(self.webview.back) next_button.triggered.connect(self.webview.forward) stop_button.triggered.connect(self.webview.stop) reload_button.triggered.connect(self.webview.reload) # 将按钮添加到导航栏上 navigation_bar.addAction(back_button) navigation_bar.addAction(next_button) navigation_bar.addAction(stop_button) navigation_bar.addAction(reload_button) # 添加URL地址栏 self.urlbar = QLineEdit() # 让地址栏能响应回车按键信号 self.urlbar.returnPressed.connect(self.navigate_to_url) navigation_bar.addSeparator() navigation_bar.addWidget(self.urlbar) # 让浏览器相应url地址的变化 self.webview.urlChanged.connect(self.renew_urlbar) # 显示地址 def navigate_to_url(self): q = QUrl(self.urlbar.text()) if q.scheme() == '': q.setScheme('http') self.webview.setUrl(q) # 响应输入的地址 def renew_urlbar(self, q): # 将当前网页的连接更新到地址栏 self.urlbar.setText(q.toString()) self.urlbar.setCursorPosition(0) # 建立tab页面 def create_tab(self, webview): self.tab = QWidget() self.tabWidget.addTab(self.tab, "新建页面") self.tabWidget.setCurrentWidget(self.tab) # 渲染到页面 self.Layout = QHBoxLayout(self.tab) self.Layout.setContentsMargins(0, 0, 0, 0) self.Layout.addWidget(webview) # 关闭tab页面 def close_Tab(self, index): if self.tabWidget.count() > 1: self.tabWidget.removeTab(index) else: self.close() # 当只有1个tab时,关闭主窗口 # 建立浏览器,重写重写createwindow方法实现页面链接的点击跳转 class WebEngineView(QWebEngineView): def __init__(self, mainwindow, parent=None): super(WebEngineView, self).__init__(parent) self.mainwindow = mainwindow # 重写createwindow() def createWindow(self, QWebEnginePage_WebWindowType): new_webview = WebEngineView(self.mainwindow) self.mainwindow.create_tab(new_webview) return new_webview # 程序入口 if __name__ == "__main__": app = QApplication(sys.argv) # 建立主窗口 browser = MainWindow() browser.show() # 运行应用,并监听事件 sys.exit(app.exec_())
能够去点击地址去尝试app
图标什么的能够在阿里巴巴矢量图标库里面去找到布局
贴一下github地址学习
https://github.com/Tangleia/Python-tools-borwser
感谢
万能的网络以及勤劳的本身