如何使用python寫(xiě)截屏小工具
前言
今天我看了一下自己的文件夾,發(fā)現(xiàn)了自己寫(xiě)了許多似乎很無(wú)聊的代碼。于是乎,一個(gè)想法油然而生:“生活已經(jīng)很無(wú)聊了,不如再無(wú)聊一點(diǎn)叭”。
說(shuō)干就干,那就開(kāi)一個(gè)專(zhuān)題,我們稱(chēng)之為kimol君的無(wú)聊小發(fā)明。
妙…啊~~~
今天要做的東西,就是用python寫(xiě)一個(gè)截屏工具。想必大家平時(shí)截屏的時(shí)候很多都是用的微信的ALT+A或者是WINDOWS自帶的截屏軟件。作為技術(shù)宅的我,怎么總是用別人的東西呢?
看我的,上圖:
效果還闊以,好歹這個(gè)小貓咪截出來(lái)也是有模有樣的~
一、技術(shù)實(shí)現(xiàn)
1. 相關(guān)庫(kù)
在python中可以實(shí)現(xiàn)截圖的庫(kù)有很多,這里我用的是pyautogui,它可以對(duì)指定區(qū)域進(jìn)行截屏:
import pyautogui
而界面部分(截屏的框選等)采用了tkinter庫(kù):
2. 定義窗口
定義一個(gè)透明的窗口,讓它的大小與屏幕一樣:
root = tk.Tk() root.overrideredirect(True) # 隱藏窗口的標(biāo)題欄 root.attributes("-alpha", 0.1) # 窗口透明度10% root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight())) root.configure(bg="black") 注:alhpa參數(shù)用于設(shè)定透明度;geometry函數(shù)用于設(shè)定窗口大??; 創(chuàng)建一個(gè)子窗口,用于顯示框選區(qū)域: # 再創(chuàng)建1個(gè)Canvas用于圈選 cv = tk.Canvas(root) x, y = 0, 0 xstart,ystart = 0 ,0 xend,yend = 0, 0 rec = ''
注:alhpa參數(shù)用于設(shè)定透明度;geometry函數(shù)用于設(shè)定窗口大?。?br /> 創(chuàng)建一個(gè)子窗口,用于顯示框選區(qū)域:
# 再創(chuàng)建1個(gè)Canvas用于圈選 cv = tk.Canvas(root) x, y = 0, 0 xstart,ystart = 0 ,0 xend,yend = 0, 0 rec = ''
3. 繪制工具條
繪制一個(gè)工具條,方便后續(xù)增加功能。講道理目前來(lái)說(shuō)這個(gè)就是個(gè)雞肋(可以省去),但是如果后續(xù)還想晚上功能的話(huà),會(huì)很有幫助。
canvas = tk.Canvas(root) canvas.configure(width=300) canvas.configure(height=100) canvas.configure(bg="yellow") canvas.configure(highlightthickness=0) # 高亮厚度 canvas.place(x=(root.winfo_screenwidth()-500),y=(root.winfo_screenheight()-300)) canvas.create_text(150, 50,font='Arial -20 bold',text='ESC退出,假裝工具條') 1234567
4. 定義事件函數(shù)
監(jiān)聽(tīng)鼠標(biāo)和鍵盤(pán)事件,實(shí)時(shí)監(jiān)控框選區(qū)域和截屏,具體的事件有:
# 綁定事件 canvas.bind("<B1-Motion>", move) # 鼠標(biāo)左鍵移動(dòng)->顯示當(dāng)前光標(biāo)位置 root.bind('<Escape>',sys_out) # 鍵盤(pán)Esc鍵->退出 root.bind("<Button-1>", button_1) # 鼠標(biāo)左鍵點(diǎn)擊->顯示子窗口 root.bind("<B1-Motion>", b1_Motion)# 鼠標(biāo)左鍵移動(dòng)->改變子窗口大小 root.bind("<ButtonRelease-1>", buttonRelease_1) # 鼠標(biāo)左鍵釋放->記錄最后光標(biāo)的位置 root.bind("<Button-3>",button_3) #鼠標(biāo)右鍵點(diǎn)擊->截屏并保存圖片 root.mainloop()
監(jiān)聽(tīng)鼠標(biāo)光標(biāo)位置:
def move(event): global x, y ,xstart,ystart new_x = (event.x-x)+canvas.winfo_x() new_y = (event.y-y)+canvas.winfo_y() s = "300x200+" + str(new_x)+"+" + str(new_y) canvas.place(x = new_x - xstart,y = new_y -ystart) print("s = ", s) print(root.winfo_x(), root.winfo_y()) print(event.x, event.y)
創(chuàng)建子窗口:
def button_1(event): global x, y ,xstart,ystart global rec x, y = event.x, event.y xstart,ystart = event.x, event.y print("event.x, event.y = ", event.x, event.y) xstart,ystart = event.x, event.y cv.configure(height=1) cv.configure(width=1) cv.config(highlightthickness=0) # 無(wú)邊框 cv.place(x=event.x, y=event.y) rec = cv.create_rectangle(0,0,0,0,outline='red',width=8,dash=(4, 4))
改變子窗口大小:
def b1_Motion(event): global x, y,xstart,ystart x, y = event.x, event.y print("event.x, event.y = ", event.x, event.y) cv.configure(height = event.y - ystart) cv.configure(width = event.x - xstart) cv.coords(rec,0,0,event.x-xstart,event.y-ystart)
松開(kāi)鼠標(biāo),記錄最后的光標(biāo)位置:
def buttonRelease_1(event): global xend,yend xend, yend = event.x, event.y
截屏并保存圖片:
def button_3(event): global xstart,ystart,xend,yend cv.delete(rec) cv.place_forget() img = pyautogui.screenshot(region=[xstart,ystart,xend-xstart,yend-ystart]) # x,y,w,h img.save('screenshot.png') sys_out(None)
退出程序:
def sys_out(even): root.destroy()
二、后續(xù)改進(jìn)
這個(gè)還有很多可以改進(jìn)的地方。
- 截圖的時(shí)候會(huì)有dos窗口遮擋:這個(gè)解決辦法由很多,類(lèi)似后臺(tái)啟動(dòng),或者將.py編譯為可執(zhí)行文件等等;
- 使用不方便,為了截圖還的運(yùn)行代碼:廢話(huà)?。?!當(dāng)然很不方便呀,不然怎么說(shuō)是個(gè)無(wú)聊的小發(fā)明呢。但是!?。∷膊皇且粺o(wú)事處,可以考慮把它放到后臺(tái)運(yùn)行。同樣可以利用快捷鍵來(lái)喚醒它并完成截圖。
- 功能單一:這只是一個(gè)很簡(jiǎn)單的demo,既然可以截屏了,那么我們離錄屏還遠(yuǎn)嗎?(正如本文開(kāi)頭的動(dòng)圖,右上角晃晃幾個(gè)大字“ApowerREC”,不給錢(qián)休想去掉,哼~)那么,我們?yōu)楹尾蛔约簩?xiě)一個(gè)呢?
寫(xiě)在最后
最后,感謝各位大大的耐心閱讀~
到此這篇關(guān)于如何使用python寫(xiě)截屏小工具的文章就介紹到這了,更多相關(guān)python截屏小工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python定時(shí)截屏實(shí)現(xiàn)
- python PyAutoGUI 模擬鼠標(biāo)鍵盤(pán)操作和截屏功能
- Python使用Phantomjs截屏網(wǎng)頁(yè)的方法
- Python實(shí)現(xiàn)可自定義大小的截屏功能
- 利用Python為iOS10生成圖標(biāo)和截屏
- 教你用Python腳本快速為iOS10生成圖標(biāo)和截屏
- Python實(shí)現(xiàn)截屏的函數(shù)
- Python實(shí)現(xiàn)截屏的函數(shù)
- 使用python編寫(xiě)android截屏腳本雙擊運(yùn)行即可
- python 實(shí)現(xiàn)的截屏工具
相關(guān)文章
PyTorch之前向傳播函數(shù)forward用法解讀
這篇文章主要介紹了PyTorch之前向傳播函數(shù)forward用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09python利用scatter繪畫(huà)散點(diǎn)圖
這篇文章主要介紹了python利用scatter繪畫(huà)散點(diǎn)圖,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助2022-06-06python實(shí)現(xiàn)AES和RSA加解密的方法
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)AES和RSA加解密的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03MxNet預(yù)訓(xùn)練模型到Pytorch模型的轉(zhuǎn)換方式
這篇文章主要介紹了MxNet預(yù)訓(xùn)練模型到Pytorch模型的轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05python3 循環(huán)讀取excel文件并寫(xiě)入json操作
這篇文章主要介紹了python3 循環(huán)讀取excel文件并寫(xiě)入json操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07使用Python進(jìn)行數(shù)據(jù)清洗和預(yù)處理的實(shí)現(xiàn)代碼
Python作為數(shù)據(jù)科學(xué)領(lǐng)域的熱門(mén)編程語(yǔ)言,提供了豐富的庫(kù)和工具來(lái)處理和清洗數(shù)據(jù),本文將介紹如何使用Python進(jìn)行數(shù)據(jù)清洗和預(yù)處理,并提供相應(yīng)的代碼示例,需要的朋友可以參考下2024-05-05不同系統(tǒng)下python與pip的安裝及常見(jiàn)問(wèn)題詳解
學(xué)習(xí)python的第一步,是安裝python,這篇文章主要是介紹,如何在不同的系統(tǒng)上安裝python,以及遇到的一些問(wèn)題,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01