利用Python+PyQt5实现简易浏览器的实战记录

目录
  • 实验环境
  • 依赖项安装
  • 编程实现
    • 浏览器有一个可以用于展示网页的窗口
  • 代码
  • 总结

实验环境

  • 操作系统:Linux Mint
  • 编辑器:vim
  • 编程语言:python3

依赖项安装

安装PyQt5

Qt是一个跨平台的C++应用程序开发框架

sudo apt-get install python3-pyqt5

安装完成后进入python命令行界面测试是否安装正确

python3
>>>import PyQt5

执行命令后如果没有任何提示,说明安装成功

编程实现

Qt为开发者提供了QtWebKit模块,QtWebKit是一个基于开源项目

WebKit的网页内容渲染引擎,借助该引擎可以更加快捷地将万维

网集成到 Qt 应用中。

更多参考:http://doc.qt.io/archives/qt-5.5/qtwebkit-index.html

浏览器有一个可以用于展示网页的窗口

创建浏览器

Qt的程序通过创建QApplication类实例来调用exec_()方法进入事件循环,

然后程序一直循环监听各种事件并把它们放入消息队列中,在适当的时候从队

列中取出处理。

...
#通过创建QApplication类实例来创建应用
app = QApplication(sys.argv)
#运行应用并循环监听事件
app.exec_()

我们可以使用Qt提供的QToolBar创建工具栏

...
# 添加导航栏
navigation_bar = QToolBar('Navigation')
# 设定图标的大小
navigation_bar.setIconSize(QSize(16, 16))
#添加导航栏到窗口中
self.addToolBar(navigation_bar)
...

QAction类提供了抽象的用户界面action

#添加按钮
reload_button = QAction(QIcon('icons/renew.png'), 'reload', self)

将action与实际功能绑定

reload_button.triggered.connect(self.browser.reload)

这些action可以被放置在窗口部件中

navigation_bar.addAction(reload_button)

Qt中有一个强大的部件类QWidgets,基于这个类可以派生出很多其他的小部件,比如QLineEdit是单行文本框,将这个不见作为地址栏,为浏览起添加一个地址栏

#添加URL地址栏
self.urlbar = QLineEdit()

Qt中每种组件都有信号机制,可用来将信号与相应的处理函数进行连接绑定,比如将地址栏的回车信号urlbar.returnPressed与navigate_to_url函数绑定,当地址栏的回车信号发出时便会触发函数navigate_to_url进行处理

# 让地址栏能响应回车按键信号
self.urlbar.returnPressed.connect(self.navigate_to_url)
#navigate_to_url函数
def navigate_to_url(self):
    q = QUrl(self.urlbar.text())
    if q.scheme() == '':
        q.setScheme('http')
    self.browser.setUrl(q)

代码

项目源码及资源下载: https://github.com/RogerLZH/Browser.git

# v1.2
# created
#   by Roger
# in 2017.1.3

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtWebKitWidgets import *

import sys

class MainWindow(QMainWindow):
    # noinspection PyUnresolvedReferences
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 设置窗口标题
        self.setWindowTitle('My Browser')
        # 设置窗口图标
        self.setWindowIcon(QIcon('icons/penguin.png'))
        # 设置窗口大小900*600
        self.resize(900, 600)
        self.show()

        # 设置浏览器
        self.browser = QWebView()
        url = 'http://blog.csdn.net/roger_lzh'
        # 指定打开界面的 URL
        self.browser.setUrl(QUrl(url))
        # 添加浏览器到窗口中
        self.setCentralWidget(self.browser)

        ###使用QToolBar创建导航栏,并使用QAction创建按钮
        # 添加导航栏
        navigation_bar = QToolBar('Navigation')
        # 设定图标的大小
        navigation_bar.setIconSize(QSize(16, 16))
        #添加导航栏到窗口中
        self.addToolBar(navigation_bar)

        #QAction类提供了抽象的用户界面action,这些action可以被放置在窗口部件中
        # 添加前进、后退、停止加载和刷新的按钮
        back_button = QAction(QIcon('icons/back.png'), 'Back', self)
        next_button = QAction(QIcon('icons/next.png'), 'Forward', self)
        stop_button = QAction(QIcon('icons/cross.png'), 'stop', self)
        reload_button = QAction(QIcon('icons/renew.png'), 'reload', self)

        back_button.triggered.connect(self.browser.back)
        next_button.triggered.connect(self.browser.forward)
        stop_button.triggered.connect(self.browser.stop)
        reload_button.triggered.connect(self.browser.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.browser.urlChanged.connect(self.renew_urlbar)

    def navigate_to_url(self):
        q = QUrl(self.urlbar.text())
        if q.scheme() == '':
            q.setScheme('http')
        self.browser.setUrl(q)

    def renew_urlbar(self, q):
        # 将当前网页的链接更新到地址栏
        self.urlbar.setText(q.toString())
        self.urlbar.setCursorPosition(0)

# 创建应用
app = QApplication(sys.argv)
# 创建主窗口
window = MainWindow()
# 显示窗口
window.show()
# 运行应用,并监听事件
app.exec_()

总结

到此这篇关于利用Python+PyQt5实现简易浏览器的文章就介绍到这了,更多相关Python+PyQt5简易浏览器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python3使用pyqt5制作一个超简单浏览器的实例

    我们使用的是QWebview模块,这里也主要是展示下QWebview的用法. 之前在网上找了半天的解析网页的内容,都不是很清楚. 这是核心代码: webview = Qwebview() webview.load(Qurl('http://www.cnblogs.com/Blaxon/')) webview.show() 完整代码(代码是拿的别的代码改得): from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.Q

  • python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法

    PyQt5浏览器控件QWebEngineView PyQt5使用QWebEngineView控件来展示HTML页面,对老版本的QWebView类不在进行维护,因为QWebEngineView使用CHromium内核可以给用户带来更好的体验 QWebEngineView类中常用方法 方法 描述 load(QUrl url) 加载指定的URL并显示 setHtml(QString&html) 将网页视图的内容设置为指定的HTML内容 QWebEngineView控件使用load()函数加载一个Web

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

    准备环境 首先我们需要的是我们的开发环境,我使用的是python 3.8.2和pyqt 5.14.2,因为有强迫症,所以喜欢使用最新版的 安装QtWebEngineWidgets 这是新版使用的web浏览器引擎,更加的贴近谷歌浏览器,好像是需要单独安装,我就是这样的 pip3 install QtWebEngineWidgets 多tab页面 做这个的时候遇到好多坑,比如在多个tab里面打开页面,要使用这个QTabWidget,这个不用我们再去下载了,已经集成了 页面链接点击无反应 这个搞了我半

  • Python PyQt5模块实现一个浏览器的示例代码

    目录 1. 首先是环境的安装 (本人使用的是PyCharm,python3.6) 2. 实现代码 3. 运行结果 4. Tips 1. 首先是环境的安装 (本人使用的是PyCharm,python3.6) pip3 install PyQt5 (没有指定版本的话,默认会安装最新的) pip3 install sip pip3 install PyQtWebEngine (PyQtWebEngine是Qt WebEngine的一组框架,该框架提供了在应用程序中嵌入 Web 内容的能力,并且基于 C

  • 利用Python+PyQt5实现简易浏览器的实战记录

    目录 实验环境 依赖项安装 编程实现 浏览器有一个可以用于展示网页的窗口 代码 总结 实验环境 操作系统:Linux Mint 编辑器:vim 编程语言:python3 依赖项安装 安装PyQt5 Qt是一个跨平台的C++应用程序开发框架 sudo apt-get install python3-pyqt5 安装完成后进入python命令行界面测试是否安装正确 python3 >>>import PyQt5 执行命令后如果没有任何提示,说明安装成功 编程实现 Qt为开发者提供了QtWeb

  • 教你利用Python+Turtle绘制简易版爱心表白

    一.效果 快放10倍 总共分为三部分,左上角的正文,下方的心形和右下角的署名 特别需要注意的一点是这种东西不但要装Python,还与分辨率有关(换个屏幕可能效果雪崩,因为用的是绝对坐标),因此并不建议实际拿去弄(哪怕能解决上述两个问题) 二.正文部分 效果: 本质是每写一行话,然后将坐标下移换行,再写一行,以此类推 # content就是该行的内容了,想些啥写啥吧 def drawLine(content, x, y, sleep=3): goto(x, y) write(content, fo

  • 利用Python写个简易版星空大战游戏

    目录 前言 一.游戏画面 二.游戏结束画面 三.游戏素材 四.游戏代码 五.核心代码 1.导入模块 2.动态星空背景函数 3.不定时产生敌机函数 4.飞碟的移动 5.子弹的移动 6.玩家射击函数 7.播放背景音乐与生成声效对象 8.新建屏幕 9.移动图章实现星星 10.哭脸 11.玩家 12.飞碟移动与子弹移动 13.敌机的碰撞检测 14.闯关成功把子弹删除 六.总结 前言 通过辣条最近观察,大家好像对划水摸鱼是情有独钟啊.于是乎我重操旧业又写上了这么一个简单版的星空大战小游戏. 当然了辣条的初

  • 利用Python实现一个简易的截图工具

    这是工作期间同事想要个截完图之后可以显示并且永远前置的截图小工具(即不会被其他程序覆盖)直接上代码: # # -*- coding: utf-8 -*- import tkinter as tk import pyautogui import tkinter from PIL import ImageTk from PIL import Image root = tk.Tk() root.wm_attributes('-topmost', 1) root.overrideredirect(Tru

  • 利用python+request通过接口实现人员通行记录上传功能

    前言: 脚本中包含以下几点常用功能: (1)实时获取当前时间 (2)while循环提交 (3)上传图片文件 一.上述功能解释: (1)实时获取当前时间,下面展示三种格式化后的日期代码示例 #!/usr/bin/python # -*- coding: UTF-8 -*- import time # 格式化成2016-03-20 11:45:39形式 print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 格式化成Sat

  • Python使用BeautifulSoup4修改网页内容的实战记录

    最近有个小项目,需要爬取页面上相应的资源数据后,保存到本地,然后将原始的HTML源文件保存下来,对HTML页面的内容进行修改将某些标签整个给替换掉. 对于这类需要对HTML进行操作的需求,最方便的莫过于 BeautifulSoup4 的库了. 样例的HTML代码如下: <html> <body> <a class="videoslide" href="http://www.test.com/wp-content/uploads/1020/1381

  • 利用Python+Selenium破解春秋航空网滑块验证码的实战过程

    目录 前言 开发工具 环境搭建 实战记录 一. 验证码简介 二.破解滑块验证码 2.1 计算滑块到缺口的距离 2.2 将滑块拖到缺口位置 前言 记录一次利用Python+Selenium破解滑块验证码的实战过程. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: pillow模块: selenium模块: numpy模块: 以及一些Python自带的模块. 其他: chromedriver 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 实战

  • Python PyQt5实现的简易计算器功能示例

    本文实例讲述了Python PyQt5实现的简易计算器功能.分享给大家供大家参考,具体如下: 这里剩下计算函数(self.calculator)未实现,有兴趣的朋友可以实现它 [知识点] 1.利用循环添加按钮部件,及给每个按钮设置信号/槽 2.给按钮设置固定大小:button.setFixedSize(QtCore.QSize(60,30)) 3.取事件的的发送者(此例为各个按钮)的文本: self.sender().text() [效果图] [源代码] import sys from PyQt

  • 利用python实现简易版的贪吃蛇游戏(面向python小白)

    引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程序.以至于常常整天在那看各种语法教程,学了几个月还是只会print('hello world'). 这样做效率太低,正确的做法,是到身边找问题,然后编程实现.比如说,我学了高等数学,我是不是应该考虑下如何去用编程实现求导或者积分操作,如果想不出怎么办,是不是应该 baidu 一下,别人是如何实现数值积分或是符号积分的.我们每天买东西都要用到加减甚至乘除,那么我是否能编写个简单的计算器,如果命令行太丑的话,我是否能够快速

随机推荐