文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【兄弟反目成仇系列】:我只是写了一个爆炸信息窗口脚本,好兄弟追了我几条街~

2023-10-20 18:20

关注

文章目录

✨ 真的来咯~

📢Hello!大家好,有好几天没有跟大家见面咯~不知道大家是否在等待《小玩意儿》专栏的更新呢😉
上一篇的文章👉【老师见打系列】:我只是写了一个自动回复讨论的脚本~

感觉挺受大伙的喜欢的呢,非常感谢各位兄弟给哥们顶上热榜💪,你们的支持就是我更新的动力❗️
所以这几天我就在想是否继续往【老师见打系列】更新文章,想出一些能让”老师见打“的idear,当然,我并不是要故意惹老师生气的哈……

在这里插入图片描述

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

仔细把代码看了个遍,突然脑海里才回想起在某年某月某日闲着没事干瞎写了这么一个代码😂,当我再次运行的时候,弹出了一个在我看来丑……呃呃呃那个……界面不太好看的窗口,于是点击窗口发送信息……欸呀我滴妈!!!这这这,运行个啥,代码太短,功能太少,界面还丑八怪咿呀咿呀~
在这里插入图片描述
说时迟那时快,突然冒出一个idear💡,为啥不把这个代码完善一下呢?搞个好看整洁一点的界面,到时候再写一篇文章,文章名我都想好了,你看那标题,起得这么熟练!咱们说干就干💪

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

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

💥爆炸信息窗口

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


💡设计思路

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

🔑模块准备

⚠️删除好友警告⚠️

先给大家开一下演示结果,带不带劲
🚦 以下高能,娱乐有度❗️ 请勿频繁使用 ❗️ 删除好友警告⚠️

源代码

from tkinter import filedialog, Tk, Labelimport ttkbootstrap as tkfrom ttkbootstrap.constants import *from pynput.keyboard import Key, Controller as keyfrom pynput.mouse import Button as Bu, Controller as mouse_elimport timefrom ctypes import *import osfrom PIL import Imageimport win32con, win32clipboardimport 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 requestsfrom lxml import etreeimport osimport threadingdef 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_urlsdef 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()

🛀结束语

实话实说,写这篇文章总共画了我三个多小时😭,一边调试一边写,期间又删删改改一些内容,减少代码量,将代码逻辑变得更加严谨些,再加上之前写代码的时间,录视频,制作gif……,加起来应该有七八个小时吧,欸,千年老腰要塌了😐(卑微求个三连🙏)

不管怎样,总算是写完了😄
不知道小伙伴们是否喜欢这一片文章,如果喜欢,可以旋个三连 点赞👍 收藏🌈 关注哦💖 您的支持,就是我更新的最大动力!感谢🌹

❗️提醒:爆炸信息窗口仅供娱乐,请勿骚扰他人,避免给他人造成生活上的不便~

peace~

来源地址:https://blog.csdn.net/Oh_Python/article/details/127573823

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯