Python使用Pyqt5实现简易浏览器(最新版本测试过)

 更新时间:2020年04月27日 09:10:50   作者:归子莫  
这篇文章主要介绍了Python使用Pyqt5实现简易浏览器(最新版本测试过),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

准备环境

首先我们需要的是我们的开发环境,我使用的是python 3.8.2和pyqt 5.14.2,因为有强迫症,所以喜欢使用最新版的

安装QtWebEngineWidgets

这是新版使用的web浏览器引擎,更加的贴近谷歌浏览器,好像是需要单独安装,我就是这样的

pip3 install QtWebEngineWidgets

多tab页面

做这个的时候遇到好多坑,比如在多个tab里面打开页面,要使用这个QTabWidget,这个不用我们再去下载了,已经集成了

页面链接点击无反应

这个搞了我半天,我之前还一直以为是跨域的问题,其实是这个机制的问题,需要重写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_())

结果

可以去点击地址去尝试

代码下载

图标什么的可以在阿里巴巴矢量图标库里面去找到

贴一下github地址

https://github.com/Tangleia/Python-tools-borwser

到此这篇关于Python使用Pyqt5实现简易浏览器(最新版本测试过)的文章就介绍到这了,更多相关Python 简易浏览器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • go和python变量赋值遇到的一个问题

    go和python变量赋值遇到的一个问题

    这篇文章主要介绍了go和python变量赋值遇到的一个问题的相关资料,需要的朋友可以参考下
    2017-08-08
  • Keras官方中文文档:性能评估Metrices详解

    Keras官方中文文档:性能评估Metrices详解

    这篇文章主要介绍了Keras官方中文文档:性能评估Metrices详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 用python求一重积分和二重积分的例子

    用python求一重积分和二重积分的例子

    今天小编就为大家分享一篇用python求一重积分和二重积分的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 教你用Type Hint提高Python程序开发效率

    教你用Type Hint提高Python程序开发效率

    本文通过介绍和实例教大家如何利用Type Hint来提升Python程序开发效率,对大家使用python开发很有帮助,有需要的参考学习。
    2016-08-08
  • 利用pyinstaller或virtualenv将python程序打包详解

    利用pyinstaller或virtualenv将python程序打包详解

    这篇文章主要给大家介绍了利用pyinstaller将python程序打包的相关资料,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • keras之权重初始化方式

    keras之权重初始化方式

    这篇文章主要介绍了keras之权重初始化方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 详解numpy.meshgrid()方法使用

    详解numpy.meshgrid()方法使用

    这篇文章主要介绍了详解numpy.meshgrid()方法使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Python秒算24点实现及原理详解

    Python秒算24点实现及原理详解

    这篇文章主要介绍了Python秒算24点,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python实现通过pil模块对图片格式进行转换的方法

    python实现通过pil模块对图片格式进行转换的方法

    这篇文章主要介绍了python实现通过pil模块对图片格式进行转换的方法,涉及Python中pil模块的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • python os模块简单应用示例

    python os模块简单应用示例

    这篇文章主要介绍了python os模块简单应用,结合实例形式分析了Python os模块操作目录与路径相关函数与使用技巧,需要的朋友可以参考下
    2019-05-05

最新评论