基于PyQt5制作一个表情包下载器

每次和朋友聊天苦于没有表情包,而别人的表情包似乎是取之不尽、用之不竭。作为一个程序员哪能甘愿认输,于是做了一个表情包下载器供大家斗图。

首先,还是介绍一下设计思路吧,和我们之前做的百度图片下载器2.0一样,使用pyqt5作为UI界面制作的框架,然后就是找一个表情包网站供我们可以下载很多的表情包。

表情包使用的网站是这个,大家也可以使用自己发现的表情包网站做下载。

话不多说,我们先说明一下使用到的python库有哪些。

UI界面使用到的pyqt5模块是下面这几个,之前也是一直使用这几个库做UI界面开发的。

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
import os

下面是在下载(也可以说是爬虫)表情包时使用到的python应用库。

import requests
import re
from urllib.request import urlretrieve
from fake_useragent import UserAgent

将使用到的标准或非标准库准备好,先来编写UI界面,下面就开始我们的表演了。

class Emoji(QWidget):
    def __init__(self):
        super(Emoji, self).__init__()
        self.init_ui()

    def init_ui(self):
        '''
        初始化UI界面布局
        :return:
        '''
        self.setWindowTitle('表情包下载器   公众号:[Python 集中营]')
        self.setWindowIcon(QIcon('表情包图标.png'))
        self.setFixedSize(500, 300)

        grid = QGridLayout()

        self.page_size = QLabel()
        self.page_size.setText('默认每页数量:')

        self.page_size_text = QLineEdit()
        self.page_size_text.setText('45')
        self.page_size_text.setReadOnly(True)

        self.page_num = QLabel()
        self.page_num.setText('设置下载页数:')

        self.page_num_text = QLineEdit()
        self.page_num_text.setPlaceholderText('请输入整数 1~200')
        self.page_num_text.setValidator(QIntValidator(1, 200))

        self.save_dir = QLineEdit()
        self.save_dir.setReadOnly(True)
        self.save_dir.setPlaceholderText('图片存储路径')

        self.save_dir_btn = QPushButton()
        self.save_dir_btn.setText('设置存储路径')
        self.save_dir_btn.clicked.connect(self.save_dir_btn_click)

        self.brower = QTextBrowser()
        self.brower.setPlaceholderText('下载进度结果展示区域...')

        self.start_btn = QPushButton()
        self.start_btn.setText('开始下载表情包')
        self.start_btn.clicked.connect(self.start_btn_click)

        grid.addWidget(self.page_size, 0, 0, 1, 1)
        grid.addWidget(self.page_size_text, 0, 1, 1, 1)
        grid.addWidget(self.page_num, 1, 0, 1, 1)
        grid.addWidget(self.page_num_text, 1, 1, 1, 1)
        grid.addWidget(self.save_dir, 2, 0, 1, 1)
        grid.addWidget(self.save_dir_btn, 2, 1, 1, 1)
        grid.addWidget(self.brower, 3, 0, 1, 2)
        grid.addWidget(self.start_btn, 4, 0, 1, 2)

        self.thread_ = DownloadThread(self)
        self.thread_.finished.connect(self.finished)
        self.thread_.log.connect(self.set_log)

        self.setLayout(grid)

    def save_dir_btn_click(self):
        '''
        设置存储文件路径
        :return:
        '''
        dir = QFileDialog.getExistingDirectory(self, "选择文件夹", os.getcwd())
        self.save_dir.setText(dir)

    def start_btn_click(self):
        '''
        启动子线程下载表情包
        :return:
        '''
        self.start_btn.setEnabled(False)
        self.thread_.start()
        self.set_log('下载线程已经启动...')

    def set_log(self, text):
        '''
        更新文本浏览器内日志信息
        :param text:
        :return:
        '''
        cursor = self.brower.textCursor()
        cursor.movePosition(QTextCursor.End)
        self.brower.append(text)
        self.brower.setTextCursor(cursor)
        self.brower.ensureCursorVisible()

    def finished(self, finished):
        if finished is True:
            self.start_btn.setEnabled(True)

编写完UI界面以后开始编写用于下载表情包的子线程吧,子线程编写需要继承pyqt5中的QThread线程来编写。

class DownloadThread(QThread):
    finished = pyqtSignal(bool)
    log = pyqtSignal(str)

    def __init__(self, parent=None):
        super(DownloadThread, self).__init__(parent)
        self.parent = parent
        self.working = True

    def __del__(self):
        self.working = False
        self.wait()

    def run(self):
        self.download()

    def download(self):
        user_agent = UserAgent()
        page_num = int(self.parent.page_num_text.text())
        save_dir = self.parent.save_dir.text()
        for n in range(1, page_num):
            url = 'https://www.fabiaoqing.com/biaoqing/lists/page/{}.html'.format(n)
            headers = {
                'user-agent': user_agent.random
            }
            response = requests.get(url, headers=headers)
            repx = re.compile('data-original="(.*?)" title="(.*?)"', re.I)
            texts = repx.findall(response.text)
            for text in texts:
                emoji_url = text[0].split('" src="')[0]
                emoji_name = emoji_url.split('/')[-1]
                urlretrieve(emoji_url,
                            save_dir + '/' + emoji_name)
                self.log.emit(emoji_name + ' 下载完成!')
        self.log.emit('子线程下载完成!')
        self.finished.emit(True)

最后,使用main函数将页面布局加入到应用的主体循环当中,启动整个应用就大功告成了。

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = Emoji()
    main.show()
    sys.exit(app.exec_())

将上面的所有的代码块copy到开发工具(我用的是Pycharm)中直接启动就成了。

效果图如下

到此这篇关于基于PyQt5制作一个表情包下载器的文章就介绍到这了,更多相关PyQt5表情包下载内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python实现微信表情包炸群功能

    Python实现微信表情包炸群效果,具体代码如下所示: # -*- coding = utf-8 -*- # @Time : 2021/1/26 15:19 # @Author : 陈良兴 # @File : 微信表情包炸群.py # @Software : PyCharm # 运行程序 > 输入次数 > 回车 > 打开微信对话框 > 将鼠标放置在"发送"按钮处即可 from pynput.keyboard import Controller as KB #控制

  • Python自动生产表情包

    作为一个数据分析师,应该信奉一句话--"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态--表情包!!!! 表情包不仅仅是一种符号,更是一种文化--是促进社交乃至社会发展的动力之一,就像懒.我们坚持认为,一张优秀的表情包,应该是一幅艺术品,是那忽如一夜春风来的灵感爆发,是那嘈嘈切切错杂弹的情思激荡,是那直挂云帆济沧海的壮志豪情,是那一览天下众山小的荣耀胜利--是不可以容忍码农用其惯有的形式固定.流程固定.毫无美感.毫无艺术的变幻和惊喜的直线思维解构.然而,在生产表

  • 利用 Python 把小伙伴制作成表情包

    目录 一.项目说明 二.实现步骤 三.Python实现 1.导入需要的库 2.绘图函数 3.导入前景照片 4.等比例缩放前景照片 5.对前景照片进行二值化处理 6.提取出感兴趣区域 7.旋转图片 8.将一些不需要的黑色区域删除掉 9.再次提取感兴趣区域并缩放 10.导入背景图片 11.组合两张图片成表情包 12.在表情包下面添加文本 12.1添加英文文本 12.2添加中文文本 13.保存表情包 四.完整代码 一.项目说明 在日常生活中,我们经常会存取一些朋友们的丑照,在这个项目中,我们以萌萌哒的

  • python实战之制作表情包游戏

    导语 大家好,我是木木子(๑╹◡╹)ノ" 今日迟来的游戏更新! 仅仅是因为最近练车一直没咋时间了~ 科二还挂科了23333~我emo了

  • Python实现多线程爬表情包详解

    目录 课程亮点 环境介绍 模块使用 流程 一. 分析我们想要的数据内容 是可以从哪里获取 二. 代码实现步骤 导入模块 单线程爬取10页数据 多进程爬取10页数据 课程亮点 系统分析目标网页 html标签数据解析方法 海量图片数据一键保存 环境介绍 python 3.8 pycharm 模块使用 requests >>> pip install requests parsel >>> pip install parsel time 时间模块 记录运行时间 流程 一. 分

  • Python基于百度AI实现抓取表情包

    本文先抓取网络上的表情图像,然后利用百度 AI 识别表情包上的说明文字,并利用表情文字重命名文件,这样当发表情包时,不需要逐个打开查找,直接根据文件名选择表情并发送. 一.百度 AI 开放平台的 Key 申请方法 本例使用了百度 AI 的 API 接口实现文字识别.因此需要先申请对应的 API 使用权限,具体步骤如下: 在网页浏览器(比如 Chrome 或者火狐) 的地址栏中输入 ai.baidu.com,进入到百度云 AI 的官网,在该页面中单击右上角的 控制台 按钮. 进入到百度云 AI 官

  • 基于PyQt5制作一个表情包下载器

    每次和朋友聊天苦于没有表情包,而别人的表情包似乎是取之不尽.用之不竭.作为一个程序员哪能甘愿认输,于是做了一个表情包下载器供大家斗图. 首先,还是介绍一下设计思路吧,和我们之前做的百度图片下载器2.0一样,使用pyqt5作为UI界面制作的框架,然后就是找一个表情包网站供我们可以下载很多的表情包. 表情包使用的网站是这个,大家也可以使用自己发现的表情包网站做下载. 话不多说,我们先说明一下使用到的python库有哪些. UI界面使用到的pyqt5模块是下面这几个,之前也是一直使用这几个库做UI界面

  • 基于PyQt5制作一个windows通知管理器

    前几天看到一个python框架win10toast,它可以用来做windows的消息通知功能.通过设定通知的间隔时间来实现一些事件通知的功能,比如可以可以提醒一头扎进代码编写过程的我们按时喝水. 界面布局采用的依旧是pyqt5的ui设计,使用界面化直接设置好想要提示的内容和时间就可以给我们定时的发通知了. UI相关的部分的还是这几个常用的组件包. from PyQt5.QtGui import * # UI 界面相关 from PyQt5.QtCore import * # 核心组件包 from

  • 基于PyQt5制作一个PDF文件合并器

    操作说明:选择多个PDF文件,执行完合并后会生成一个新的PDF文件,这个新的PDF文件包含所有源PDF文件的页面. 将相关的三方模块导入到代码块中... from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * import sys import os import PyPDF2 # PDF操作库 QThread是PyQt5的子线程应用,之前已经使用过比较多的次数了.一般使用时通过创建一个

  • 基于PyQT5制作一个二维码生成器

    个性化二维码的exe桌面应用的获取方式我放在文章最后面了,注意查收.通过执行打包后的exe应用程序可以直接运行生成个性化二维码. 开始之前先来看一下通过二维码生成器是如何生成个性化二维码的. 其中使用的python包和之前的GUI应用制作使用的模块是一样的. # -*- coding:utf-8 -*- import os import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore im

  • 基于PyQt5制作Excel数据分组汇总器

    在写数据汇总分组工具之前梳理一下需求,要求一:能够将excel的数据展示到列表中.要求二:能够支持按列汇总数据,并且多列分组汇总.要求三:能够预览分组汇总以后的数据,最后将分好组汇总的数据保存到新的excel数据文件中. 主要使用到第三方python模块有下面这些,和前面几个 PyQt5 应用不同的是这次增加了一个样式模块 qdarkstyle ,通过最后将这个模块直接加入到 QApplication 中就可以显示成黑色酷酷的应用了.这个样式我个人是比较喜欢的... '''应用操作库''' im

  • 基于PyQT5制作一个敏感词检测工具

    设计思路:根据敏感词库文件筛选,查看输入的文本中是否包含敏感词汇.从而过滤出相关的敏感词. 导入应用相关的模块. import os import logging import sys 导入UI界面相关的模块. from PyQt5.QtWidgets import QApplication,QWidget,QVBoxLayout,QTextEdit,QGridLayout,QLineEdit,QPushButton,QFileDialog from PyQt5.QtGui import QIc

  • 基于PyQt5制作一个群发邮件工具

    演示示例使用QQ邮箱发送邮件,先获取自己的QQ邮箱的授权码.因为后面发送邮件时需要使用自己的授权码作为邮箱的密码登录邮箱最后达到发送邮件的目的. 将UI处理的相关的界面包导入进来 from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * # 应用操作相关的库 import sys # 邮件发送相关的库 import smtplib from email.mime.text import M

  • 基于PyQt5制作一个gif动态图片生成器

    这个小工具制作的目的是为了将多张图片组合后生成一张动态的GIF图片.设置界面化的操作,只需要将选中的图片导入最后直接生成动态图片. 导入界面相关的第三方库 from PyQt5.QtWidgets import * from PyQt5.QtGui import * 动态图片处理模块 import imageio 应用操作相关库 import sys import os from datetime import datetime 这是用图片生成器生成的一张GIF图片,大家在生成时尽量选择两张大小

  • 基于PyQT5制作一个课堂点名系统

    刷抖音的时候发现一个老师在用的课堂点名系统.用PyQt5实现了一下同款,导入学生姓名,测试了一下完美运行. 操作效果展示: 完整源代码块还是放在了文章的最后面 使用的时候准备好学生姓名的文件,使用导入数据的按钮直接导入就可以开始点名了.新建一个文本文档,将姓名设置设置好,姓名文件示例如下. 使用系统库或者第三方库都比较常规,这里就不一一介绍了. from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore im

  • 基于PyQT5制作一个桌面摸鱼工具

    目录 前言 按键功能控制 主要功能 核心代码 前言 现在我能一整天都严肃地盯着屏幕,看起来就像在很认真地工作, 利用摸鱼,打开小说,可实行完美摸鱼,实时保存进度 用PYQT5 Mock一个摸鱼软件 类似于Thief 按键功能控制 q 退出 B 书签功能 F 增加字体大小 Shift F 减小字体 O 打开文件,现在仅仅支持 utf8格式的txt文件 主要功能 FlameLess Window 无边框窗口 一键快速退出 ini 文件读写 右键上下文菜单 核心代码 pyqt 实现功能还是比较顺畅的,

随机推荐