介绍
这篇文章主要为大家展示了Python如何使用Pyqt5实现简易浏览器,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。
首先我们需要的是我们的开发环境,我使用的是Python 3.8.2和pyqt 5.14.2,因为有强迫症,所以喜欢使用最新版的
这是新版使用的网页浏览器引擎,更加的贴近谷歌浏览器,好像是需要单独安装,我就是这样的
pip3安装QtWebEngineWidgets
做这个的时候遇到好多坑,比如在多个标签里面打开页面,要使用这个QTabWidget,这个不用我们再去下载了,已经集成了
<强>页面链接点击无反应强>
这个搞了我半天,我之前还一直以为是跨域的问题,其实是这个机制的问题,需要重写createWindow方法
#创建浏览器,重写重写createwindow方法实现页面连接的点击跳转 类WebEngineView (QWebEngineView): def __init__(自我,主窗口,父母=None): 超级(WebEngineView,自我). __init__(父) 自我。主窗口=主窗口 #重写createwindow () def createWindow(自我,QWebEnginePage_WebWindowType): new_webview=WebEngineView (self.mainwindow) self.mainwindow.create_tab (new_webview) 返回new_webview
然后大体就是一些页面的布局,这个可以使用Qt设计器,可以自动转化成为我们的py代码
然后就是一些前进,后退,刷新,停止的方法
# - * -编码:utf - 8 - * # @Author: dshj # @Date: 2020/04/26 导入系统 从PyQt5。QtWidgets进口* 从PyQt5。QtCore进口* 从PyQt5。QtGui进口* 从PyQt5。QtWebEngineWidgets进口QWebEngineView #创建主窗口 类主窗口(QMainWindow): def __init__(自我,* args, * * kwargs): 超级()。__init__ (* args, * * kwargs) #设置窗口标题 self.setWindowTitle(& # 39;简易浏览器& # 39;) #设置窗口大小900 * 600 自我。调整(1300、700) self.show () #创建tabwidget(多标签页面) 自我。tabWidget=QTabWidget () self.tabWidget.setTabShape (QTabWidget.Triangular) self.tabWidget.setDocumentMode(真正的) self.tabWidget.setMovable(真正的) self.tabWidget.setTabsClosable(真正的) self.tabWidget.tabCloseRequested.connect (self.close_Tab) self.setCentralWidget (self.tabWidget) 第号一个标签页面 自我。webview=WebEngineView自我(自我)#必须要有,是将主窗口作为参数,传给浏览器 self.webview.load (QUrl (“http://www.baidu.com")) self.create_tab (self.webview) #使用QToolBar创建导航栏,并使用QAction创建按钮 #添加导航栏 navigation_bar=QToolBar(& # 39;导航# 39;) #设定图标的大小 navigation_bar。16)setIconSize (QSize(16日) #添加导航栏到窗口中 self.addToolBar (navigation_bar) # QAction类提供了抽象的用户界面行动,这些行动可以被放置在窗口部件中 #添加前进,后退,停止加载和刷新的按钮 back_button=QAction (QIcon(& # 39;图标/houtui.png& # 39;), & # 39;回# 39;,自我) next_button=QAction (QIcon(& # 39;图标/qianjin.png& # 39;), & # 39;向前# 39;,自我) stop_button=QAction (QIcon(& # 39;图标/close.png& # 39;), & # 39;停止# 39;,自我) reload_button=QAction (QIcon(& # 39;图标/shuaxin.png& # 39;), & # 39;重载# 39;,自我) #绑定事件 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地址栏 自我。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(自我): q=QUrl (self.urlbar.text ()) 如果q.scheme ()==& # 39; & # 39;: q.setScheme (& # 39; http # 39;) self.webview.setUrl (q) #响应输入的地址 def renew_urlbar(自我,q): #将当前网页的链接更新到地址栏 self.urlbar.setText (q.toString ()) self.urlbar.setCursorPosition (0) #创建选项卡页面 def create_tab(自我,webview): 自我。选项卡=QWidget () self.tabWidget.addTab(自我。选项卡上,“新建页面“) self.tabWidget.setCurrentWidget (self.tab) #渲染到页面 自我。布局=QHBoxLayout (self.tab) self.Layout。setContentsMargins (0, 0, 0, 0) self.Layout.addWidget (webview) #关闭标签页面 def close_Tab(自我,指数): 如果self.tabWidget.count()在1: self.tabWidget.removeTab(索引) 其他: self.close() #当只有1个选项卡时,关闭主窗口 #创建浏览器,重写重写createwindow方法实现页面连接的点击跳转 类WebEngineView (QWebEngineView): def __init__(自我,主窗口,父母=None): 超级(WebEngineView,自我). __init__(父) 自我。主窗口=主窗口 #重写createwindow () def createWindow(自我,QWebEnginePage_WebWindowType): new_webview=WebEngineView (self.mainwindow) self.mainwindow.create_tab (new_webview) 返回new_webview #程序入口 if __name__==癬_main__": 应用=QApplication (sys.argv) #创建主窗口 浏览器=主窗口() browser.show () #运行应用,并监听事件 sys.exit (app.exec_ ())Python如何使用Pyqt5实现简易浏览器