<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
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', 'rn']: # 判空處理 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爆炸資訊視窗內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45