基于Python编写一个爆炸信息窗口脚本

目录
  • 前言
  • 爆炸信息窗口
    • 设计思路
    • 模块准备
    • 删除好友警告
  • 源代码
  • 批量获取表情包

前言

Hello!大家好,有好几天没有跟大家见面咯~不知道大家是否在等待《小玩意儿》专栏的更新呢

上一篇的文章【老师见打系列】:我只是写了一个自动回复讨论的脚本~

感觉挺受大伙的喜欢的呢,非常感谢各位兄弟给哥们顶上热榜,你们的支持就是我更新的动力

所以这几天我就在想是否继续往【老师见打系列】更新文章,想出一些能让”老师见打“的idear,当然,我并不是要故意惹老师生气的哈……

直到前天,突然想写点什么,于是打开了pycharm,当我正在想着还有什么好的idear的时候,突然看到了左下角的一个py文件,”爆炸信息.py“我啥时候写的?那时的我一脸懵逼的看着文件里的代码,脑海里没有任何有关于它的记忆,不会是哥们梦游的时候给敲的吧……

仔细把代码看了个遍,突然脑海里才回想起在某年某月某日闲着没事干瞎写了这么一个代码,当我再次运行的时候,弹出了一个在我看来丑……呃呃呃那个……界面不太好看的窗口,于是点击窗口发送信息……欸呀我滴妈!!!这这这,运行个啥,代码太短,功能太少,界面还丑八怪咿呀咿呀~

说时迟那时快,突然冒出一个idear,为啥不把这个代码完善一下呢?搞个好看整洁一点的界面,到时候再写一篇文章,文章名我都想好了,你看那标题,起得这么熟练!咱们说干就干

于是哥们又挺着千年老腰,花了两三个小时的时间敲出一个还算不错的代码,用了一下,效果很好,我兄弟把我好友给删了……

开个玩笑,好了,具体实现效果如何,请各位看官往下看

爆炸信息窗口

适当娱乐,请勿打扰他人正常生活哦

设计思路

我是这样想的,如果只简单的写一个单一信息发送就太无趣了,于是我就像每次得发不同的话,那才有意思,于是就想到了txt文件,但是,只有文字是不是效果不强,于是想到了下最流行的交流方式:表情包,诶~这就齐了(当然各位还有其他的idear可以在评论区里评论哈)

模块准备

tkinter?不行,窗口界面差点意思,那就用 ttkbootstrap模块,ttkbootstrap 是一个基于 tkinter 的界面美化库,使用这个工具可以开发出类似前端 bootstrap 风格的 tkinter 桌面程序,但是还是得用到tkinter中的文件读取函数

pynput模块,pynput是一个监听、操作键盘鼠标库,主要用来实现消息的发送,咱们的招数能不能放出去就靠它了

time模块,time用来控制放招的间隔,咱们得讲究攻守进退呀!

ctypes模块,

os模块,主要用来查找文件,配合ttkbootstrap,擦出大火花

PIL模块,可以叫它图像处理工具包,用来读取表情包

win32con模块,此模块与pywin32配合使用,模块中定义了Windows下关于图形操作的API

win32clipboard模块,它的功能主要有剪切中文、图片等信息,表情包能不能发出去就靠它了

pyautogui模块,主要用来控制按下键盘的Ctrl+V键,相信各位对Ctrl C 和 Ctrl V的操作相当之熟练了吧

删除好友警告

先给大家开一下演示结果,带不带劲

以下高能,娱乐有度️ 请勿频繁使用 ️ 删除好友警告

第一式:只说一句

第二式:唐僧念经(发送txt文件中的内容)

第三式:不说了,扔图(发送表情包)

源代码

from tkinter import filedialog, Tk, Label
import ttkbootstrap as tk
from ttkbootstrap.constants import *
from pynput.keyboard import Key, Controller as key
from pynput.mouse import Button as Bu, Controller as mouse_el
import time
from ctypes import *
import os
from PIL import Image
import win32con, win32clipboard
import pyautogui

"""
============= 窗口设计 ===========
"""
class Explosion_window(tk.Frame):
    # master等待接收根窗口对象,app等待接收自定义的模块
    def __init__(self, master=None, app=None):
        tk.Frame.__init__(self, master)
        self.master = master
        self.pack()
        # 调用在根窗口创建组件的函数
        self.createWidget()

    def createWidget(self):
        tk.Label(self, text='IT工藤新一 爆炸信息窗口', font=('华文行楷', 25)).grid(row=0, column=0, pady=10)
        tk.Button(self, text='第一式:我只说一句', command=self.first_formula, bootstyle=SUCCESS).grid(row=1, column=0, pady=10)
        tk.Button(self, text='第二式:唐僧念经', command=self.second_formula, bootstyle=SUCCESS).grid(row=2, column=0, pady=10)
        tk.Button(self, text='第三式:不说了,扔图', command=self.three_formula, bootstyle=SUCCESS).grid(row=3, column=0, pady=10)

    # 第一式
    def first_formula(self):
        root_1 = tk.Toplevel() # 实例化一个顶级类窗口
        root_1.title('第一式')
        root_1.geometry('500x300')
        tk.Label(root_1, text='第一式:我只说一句', font=('华文行楷', 22)).grid(row=0, column=1, pady=10)
        tk.Label(root_1, text='招数内容:', font=('华文行楷', 15)).grid(row=1,column=0)
        tk.Label(root_1, text='放招次数:', font=('华文行楷', 15)).grid(row=2, column=0)
        tk.Label(root_1, text='放招间隔(s):', font=('华文行楷', 15)).grid(row=3, column=0)

        words = tk.StringVar() # 接收用户输入的文字
        times = tk.IntVar() # 结束放招次数
        time_interval = tk.IntVar() # 接收放招间隔

        tk.Entry(root_1, textvariable=words, font=('黑体', 15)).grid(row=1, column=1, pady=10)
        tk.Entry(root_1, textvariable=times, font=('黑体', 15)).grid(row=2, column=1, pady=10)
        tk.Entry(root_1, textvariable=time_interval, font=('黑体', 15)).grid(row=3, column=1, pady=10)
        tk.Button(root_1, text='确定放招', command=lambda: app.first_move(words.get(), times.get(), time_interval.get(), root_1), bootstyle=(SUCCESS, OUTLINE)).grid(row=4, column=1)
        root_1.mainloop()

    def second_formula(self):
        formula = 2
        self.second_three_formula(formula) # 调用放招函数

    def three_formula(self):
        formula = 3
        self.second_three_formula(formula)  # 调用放招函数

    def second_three_formula(self, formula): # 第二、第三式的窗口一样,为了提高代码的重用性,用选择判断语句进行操作
        root_2 = tk.Toplevel()

        if formula == 2:
            title1 = '第二式:唐僧念经'
            text1 = '选择txt文件'
            tk.Button(root_2, text='确定放招', command=lambda: app.second_move(filepath.get(), time_interval.get(), root_2),
                      bootstyle=(SUCCESS, OUTLINE)).grid(row=3, column=1, pady=10)

        elif formula == 3:
            title1 = '第三式:不说了,扔图'
            text1 = '选择表情包文件夹'
            tk.Button(root_2, text='确定放招', command=lambda: app.three_move(filepath.get(), time_interval.get(), root_2),
                      bootstyle=(SUCCESS, OUTLINE)).grid(row=3, column=1, pady=10)

        root_2.title(title1)
        root_2.geometry('700x190')
        filepath = tk.StringVar()  # 接收路径
        time_interval = tk.IntVar()  # 接收放招间隔
        tk.Label(root_2, text=title1, font=('华文行楷', 22)).grid(row=0, column=1)
        tk.Label(root_2, text='文件路径:', font=('华文行楷', 15)).grid(row=1, column=0)
        tk.Label(root_2, text='放招间隔(s):', font=('华文行楷', 15)).grid(row=2, column=0)

        def select_file(filepath):  # 选择
            # 选择文件夹
            if formula == 2:
                select_file_path = filedialog.askopenfilename()  # 使用askopenfilename函数选择单个文件
            elif formula == 3:
                select_file_path = filedialog.askdirectory() # askdirectory选择文件夹
            filepath.set(select_file_path)

        tk.Entry(root_2, textvariable=filepath, font=('黑体', 15)).grid(row=1, column=1)
        tk.Entry(root_2, textvariable=time_interval, font=('黑体', 15)).grid(row=2, column=1)
        tk.Button(root_2, text=text1, command=lambda: select_file(filepath)).grid(row=1, column=2, pady=10)

    # 倒计时
    def count_down(self, info=None):
        pass

"""
=============== 功能实现 ================
"""
class Send_information(object):
    def __init__(self):
        pass

    # 放招函数,用于第一、二式
    def Release_moves(self, words=None, times=0, time_interval=0, txt_li=None): # times接收发送的次数,time_interval接收发送的时间间隔
        keyboard = key()  # 获取键盘权限
        mouse = mouse_el()  # 获取鼠标权限
        mouse.press(Bu.left)  # 鼠标左键点击
        mouse.release(Bu.left)  # 鼠标左键松开
        n = 5
        print('请在五秒内将鼠标放到聊天框内并点击!!!')
        for k in range(5):
            print(f'倒计时{n - k}秒')
            time.sleep(1)  # 程序运行等待五秒你是猪

        if times == 0:
            for i in txt_li:
                keyboard.type(f"{i}")  # 输入框的内容
                keyboard.press(Key.enter)  # 回车键按下
                keyboard.release(Key.enter)  # 回车键松开
                time.sleep(time_interval)
        else:
            for i in range(times):
                keyboard.type(f"{words}")  # 输入框的内容
                keyboard.press(Key.enter)  # 回车键按下
                keyboard.release(Key.enter)  # 回车键松开
                time.sleep(time_interval)

    # 接收用户输入的数据
    def first_move(self, words, times, time_interval, root_1):
        root_1.destroy()
        self.Release_moves(words=words, times=times, time_interval=time_interval) # 调用放招函数

    # 接收用户选择的文件路径
    def second_move(self, txt_path, time_interval, root_2):
        root_2.destroy()
        txt_li = [] # 保存txt中的语句
        with open(txt_path, 'r', encoding='utf-8') as f:
            for line in f: # 循环遍历输出txt文件内容
                if line in ['\n', '\r\n']: # 判空处理
                    pass
                elif line.strip() == "": # 空行直接跳过
                    pass
                else:
                    txt_li.append(line.strip()) # 将内容保存到txt中
        self.Release_moves(txt_li=txt_li, time_interval=time_interval) # 调用放招哈数

    # 接收用户选择的图片
    def three_move(self, photo_path, time_interval, root_3):
        root_3.destroy()
        filepath = [photo_path + '/' + file for file in os.listdir(photo_path)] # 拼接路径
        i = 0
        n = 5
        print('请在五秒内将鼠标放到聊天框内并点击!!!')
        for k in range(5):
            print(f'倒计时{n - k}秒')
            time.sleep(1)  # 程序运行等待五秒你是猪

        # 复制图片
        for path in filepath:
            try:
                im = Image.open(path)
                im.save('11.bmp')
                aString = windll.user32.LoadImageW(0, r"11.bmp", win32con.IMAGE_BITMAP, 0, 0, win32con.LR_LOADFROMFILE)
            except:
                continue

            if aString != 0:  ## 由于图片编码问题  图片载入失败的话  aString 就等于0
                win32clipboard.OpenClipboard()
                win32clipboard.EmptyClipboard()
                win32clipboard.SetClipboardData(win32con.CF_BITMAP, aString)
                win32clipboard.CloseClipboard()

                keyboard = key()  # 获取键盘权限
                if i == 0:
                    i += 0
                pyautogui.hotkey('ctrl', 'v')
                keyboard.press(Key.enter)  # 回车键按下
                keyboard.release(Key.enter)  # 回车键松开
                time.sleep(time_interval)

if __name__ == '__main__':
    root = tk.Window()   # 建立一个根窗口
    root.title('爆炸信息') # 窗口名称
    root.geometry('500x300') # 窗口大小  宽x高
    app = Send_information() # 实例化Send_information对象
    Explosion_window(root, app) # 实例化Explosion_window对象
    root.mainloop()

这时你可能会问

诶,到了这的小伙伴可能会有些疑问:表情包怎么下载呀?一个个手动下载岂不是太麻烦了呀……

别担心,我怎么会让你们动手呢,最多动动脑

来来来!敲黑板了!!!现在布置一个作业!接下来我将放一个批量下载表情包的源码,通过观察源码进行操作,实现图片下载。

提醒!真相只有一个:只用改url

批量获取表情包

import requests
from lxml import etree
import os
import threading

def get_url(url, img_urls): #获取图片url
    res = requests.get(url, headers=headers)    # 发送请求
    html = etree.HTML(res.text)     # 将html元素转换成html对象
    img_urls += html.xpath('//div[@class="thumbnail"]/a/img/@src')

def user_choose(): # 用户选择下载图片的页数
    img_urls = []  # 存放图片url
    # 请输入下载网址
    url = 'http://www.bbsnet.com/egao'
    # 用户输入页数
    page = int(input('请输入获取的页数:'))
    for i in range(0, page):
        if page == 0:
            get_url(url, img_urls)
        elif page >= 1:
            link = url + f'/page/{i+1}'     # 拼接链接
            get_url(link, img_urls)   #调用获取图片url的函数
    return img_urls

def download_picture(img_url, i, j): # 下载图片
    res = requests.get(img_url, headers)
    with open(f'./表情包/表情包-{i}.{j}', 'wb') as f:
        f.write(res.content)

if __name__ == '__main__':
    if not os.path.exists('./表情包'):
        os.makedirs('./表情包')

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
    }
    img_urls = user_choose()

    threads = []
    for i in range(len(img_urls)):
        t = threading.Thread(target=download_picture, args=(img_urls[i], i, img_urls[i][-3:]))
        threads.append(t)
    for t in threads:
        t.start()

到此这篇关于基于Python编写一个爆炸信息窗口脚本的文章就介绍到这了,更多相关Python爆炸信息窗口内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python基于win32实现窗口截图

    本文实例为大家分享了python基于win32实现窗口截图的具体代码,供大家参考,具体内容如下 获取窗口句柄和标题 import win32gui hwnd_title = dict() def _get_all_hwnd(hwnd, mouse): if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd): hwnd_title.update({hwnd: w

  • 手把手教你利用Python创建一个游戏窗口

    目录 前言 安装Pyagme 检查是否安装Pygame:  一 (检查python是否配置环境变量) 检查是否安装Pygame:  二 (检查pygame是否安装) 未安装Pygame : 一 (检查是否安装pip) 未安装Pygame : 二 (利用pip安装Pygame) 步入正题: 利用Pygame制作一个简单的游戏窗口 总结: 前言 想要利用Python创建一个游戏窗口就需要用到一个强大的第三方功能库: Pygame 那么既然需要用到Pygame这个第三方库 所以在写程序之前需要做一个准

  • Python 自动唤醒窗口截图脚本

    目录 1.准备 2.如何获取窗口坐标 3. 还原最小化窗口 4.截图 利用Python自带的win32api和win32con.win32gui等模块,我们能执行许多windows下的自动化操作.比如两个窗口的自动点击操作,从软件中的窗口复制文本到txt中,甚至是截图操作. 截图的操作用途最为广泛,你可以用它配合定时工具,定时检测某个程序的运行情况:甚至可以根据截图做一些辅助性的决策,比如玩类似于<连连看 >的 游戏时,对相同类型的方块进行标记,辅助你玩游戏. 下面就讲讲如何使用 win32a

  • Python实现超快窗口截图功能详解

    实现思路是先获取到当前最上面活动的窗口信息,然后提取该窗口的名称信息. 之后获取窗口的坐标信息,即左上角的开始坐标及右下角的结束坐标.最后直接截图并将截图的图片进行展示. 其中用到了两个第三方模块,分别是win32gui和Pillow,安装命令如下: pip install Pillow pip install win32gui 将其中使用到的三个非标准库导入进来. from win32gui import * # 操作windows窗口 from PIL import ImageGrab #

  • 基于Python编写一个爆炸信息窗口脚本

    目录 前言 爆炸信息窗口 设计思路 模块准备 删除好友警告 源代码 批量获取表情包 前言 Hello!大家好,有好几天没有跟大家见面咯~不知道大家是否在等待<小玩意儿>专栏的更新呢 上一篇的文章[老师见打系列]:我只是写了一个自动回复讨论的脚本~ 感觉挺受大伙的喜欢的呢,非常感谢各位兄弟给哥们顶上热榜,你们的支持就是我更新的动力 所以这几天我就在想是否继续往[老师见打系列]更新文章,想出一些能让”老师见打“的idear,当然,我并不是要故意惹老师生气的哈…… 直到前天,突然想写点什么,于是打开

  • 基于Python编写一个自动关机程序

    目录 1.实现效果 2.实现步骤 3.全部代码 1.实现效果 2.实现步骤 模块导入 import os,sys,time from PyQt5 import QtCore,QtWidgets,QtGui 窗口设置 def pageShow(self,page): #设置窗口的位置和大小 page.setGeometry(400,400,400,200) #设置窗口的标题 page.setWindowTitle('Window shutdown') #设置窗口的图标 #page.setWindo

  • 基于Python编写一个二维码生成器

    目录 前言 1.安装第三方库 2.QRCode参数解释 3.自定义二维码生成器 4.给二维码加图片 5.全部代码 前言 二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型.现在的二维码随处可见,甚至有人觉得在以后的墓碑上都可以刻一个二维码,通过扫描该二维码便可知墓主传奇的一生.所以如何快速定制自己的二维码便显得极为的重要,本文用python生成

  • 基于Python编写一个图片识别系统

    目录 项目介绍 环境准备 程序原理 实现脚本 测试效果 总结 项目介绍 本项目将使用python3去识别图片是否为色情图片,会使用到PIL这个图像处理库,并且编写算法来划分图像的皮肤区域 介绍一下PIL: PIL(Python Image Library)是一种免费的图像处理工具包,这个软件包提供了基本的图像处理功能,如:改变图像大小,旋转图像,图像格式转化,色场空间转换(这个我不太懂),图像增强(就是改善清晰度,突出图像有用信息),直方图处理,插值(利用已知邻近像素点的灰度值来产生未知像素点的

  • 基于Python编写一个B站全自动抽奖的小程序

    目录 导语 开发工具 环境搭建 原理简介 导语 应好友邀请,帮他写了个小程序,功能类似于实时监控自己关注的UP主,如果关注的UP主中有人发布了抽奖的动态,就自动参与这个抽奖.这样就能不错过任何一个可以暴富的机会了.写完之后感觉这个想法还是挺有意思的,于是上来分享一波. 废话不多说,让我们愉快地开始吧~ 开发工具 Python版本:3.7.8 相关模块: DecryptLogin模块: 以及一些python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原

  • 基于Python编写一个语音合成系统

    目录 背景 语音合成系统 准备工作 步骤 代码实现 背景 一直对语音合成系统比较感兴趣,总想能给自己合成一点内容,比如说合成小说,把我下载的电子书播报给我听等等. 语音合成系统 其实就是一个基于语音合成的工具,但是这个东西由于很多厂家都提供了API的形式,因此开发难度大大降低,只需要调用几个API即可实现属于自己的语音合成工具:麻雀虽小,五脏俱全.往大了说,这就是一个小型的语音合成系统. 准备工作 首先我们电脑上需要安装 Anaconda Python 3.7 visual studio cod

  • 基于Python编写一个简单的端口扫描器

    目录 1.需要的库 2.获取一个 host 地址 3.循环所有的端口 4.完整脚本 端口扫描是非常实用的,不止用在信息安全方面,日常的运维也用得到.这方面的工具也不要太多,搞过 CTF 的朋友会告诉你有多少端口扫描工具,那为什么还要用 Python 再自己实现一遍?这个问题就像饭店里的菜已经很好吃了,为什么还要自己烧菜一样,主要还是为了适合自己的口味,添加自己需要的个性功能. 今天我们将用 20 行代码编写一个简单的端口扫描器.让我们开始吧! 1.需要的库 都是标准库,因此内网环境也不影响: i

  • 基于Python编写一个微博抽奖小程序

    目录 导语 开发工具 环境搭建 先睹为快 原理简介 导语 带大家写个微博自动抽奖小程序吧,motivation和之前的B站自动抽奖小程序一样: 不想内卷了,整个B站全自动抽奖的小程序吧,万一不小心暴富了呢~ 废话不多说,让我们愉快地开始吧~ 开发工具 Python版本:3.7.8 相关模块: DecryptLogin模块: DecryptLoginExamples模块: 以及一些python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 先睹为快 首先,

  • 基于Python编写一个点名器的示例代码

    目录 前言 主界面 添加姓名 查看花名册 使用指南 名字转动功能 完整代码 前言 想起小学的时候老师想点名找小伙伴回答问题的时候,老师竟斥巨资买了个点名器.今日无聊便敲了敲小时候老师斥巨资买的点名器. 本人姓白,就取名小白点名器啦,嘿嘿 代码包含:添加姓名.查看花名册.使用指南.随机抽取名字的功能(完整源码在最后) 主界面 定义主界面.使用“w+”模式创建test.txt文件(我添加了个背景图片,若不需要可省略) #打开时预加载储存在test.txt文件中的花名册 namelist = [] w

  • python编写一个会算账的脚本的示例代码

    python算账脚本 1.假如小明卡里有10000元去商场买东西发现钱不够又向父母借了5000账单如下 2.以下脚本就能实现上面的运算 from time import strftime import pickle import os try: def save(): data = strftime('\033[35m%Y-%m-%d\033[0m') money = int(input('How much do you have to save?:')) comment = input('Wh

随机推荐