Python如何使用Pyqt5实现简易浏览器

  介绍

这篇文章主要为大家展示了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实现简易浏览器