最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用python寫截屏小工具

 更新時(shí)間:2020年09月29日 15:53:02   作者:鬼骨子  
這篇文章主要介紹了如何使用python寫截屏小工具,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前言

今天我看了一下自己的文件夾,發(fā)現(xiàn)了自己寫了許多似乎很無聊的代碼。于是乎,一個(gè)想法油然而生:“生活已經(jīng)很無聊了,不如再無聊一點(diǎn)叭”。
說干就干,那就開一個(gè)專題,我們稱之為kimol君的無聊小發(fā)明。
妙…啊~~~

今天要做的東西,就是用python寫一個(gè)截屏工具。想必大家平時(shí)截屏的時(shí)候很多都是用的微信的ALT+A或者是WINDOWS自帶的截屏軟件。作為技術(shù)宅的我,怎么總是用別人的東西呢?
看我的,上圖:


效果還闊以,好歹這個(gè)小貓咪截出來也是有模有樣的~

一、技術(shù)實(shí)現(xiàn)

1. 相關(guān)庫

在python中可以實(shí)現(xiàn)截圖的庫有很多,這里我用的是pyautogui,它可以對(duì)指定區(qū)域進(jìn)行截屏:

import pyautogui

而界面部分(截屏的框選等)采用了tkinter庫:

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è)定窗口大小;
創(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ù)增加功能。講道理目前來說這個(gè)就是個(gè)雞肋(可以省去),但是如果后續(xù)還想晚上功能的話,會(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)聽鼠標(biāo)和鍵盤事件,實(shí)時(shí)監(jiān)控框選區(qū)域和截屏,具體的事件有:

# 綁定事件
canvas.bind("<B1-Motion>", move) # 鼠標(biāo)左鍵移動(dòng)->顯示當(dāng)前光標(biāo)位置
root.bind('<Escape>',sys_out) # 鍵盤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)聽鼠標(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) # 無邊框
 cv.place(x=event.x, y=event.y)
 rec = cv.create_rectangle(0,0,0,0,outline='red',width=8,dash=(4, 4))

改變子窗口大?。?/p>

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)

松開鼠標(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è)解決辦法由很多,類似后臺(tái)啟動(dòng),或者將.py編譯為可執(zhí)行文件等等;
  • 使用不方便,為了截圖還的運(yùn)行代碼:廢話?。?!當(dāng)然很不方便呀,不然怎么說是個(gè)無聊的小發(fā)明呢。但是!??!它也不是一無事處,可以考慮把它放到后臺(tái)運(yùn)行。同樣可以利用快捷鍵來喚醒它并完成截圖。
  • 功能單一:這只是一個(gè)很簡單的demo,既然可以截屏了,那么我們離錄屏還遠(yuǎn)嗎?(正如本文開頭的動(dòng)圖,右上角晃晃幾個(gè)大字“ApowerREC”,不給錢休想去掉,哼~)那么,我們?yōu)楹尾蛔约簩懸粋€(gè)呢?

寫在最后

最后,感謝各位大大的耐心閱讀~

到此這篇關(guān)于如何使用python寫截屏小工具的文章就介紹到這了,更多相關(guān)python截屏小工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Python圖像形態(tài)學(xué)處理(開運(yùn)算,閉運(yùn)算,梯度運(yùn)算)

    詳解Python圖像形態(tài)學(xué)處理(開運(yùn)算,閉運(yùn)算,梯度運(yùn)算)

    數(shù)學(xué)形態(tài)學(xué)(Mathematical Morphology)是一種應(yīng)用于圖像處理和模式識(shí)別領(lǐng)域的新方法。本文將為大家介紹Python圖像形態(tài)學(xué)處理中的開運(yùn)算、閉運(yùn)算和梯度運(yùn)算,感興趣的可以了解一下
    2022-06-06
  • python中文本字符處理的簡單方法記錄

    python中文本字符處理的簡單方法記錄

    這篇文章主要給大家介紹了關(guān)于python中文本字符處理的簡單方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python符號(hào)計(jì)算之實(shí)現(xiàn)函數(shù)極限的方法

    Python符號(hào)計(jì)算之實(shí)現(xiàn)函數(shù)極限的方法

    這篇文章主要介紹了Python符號(hào)計(jì)算之實(shí)現(xiàn)函數(shù)極限的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 解決python3 安裝不了PIL的問題

    解決python3 安裝不了PIL的問題

    今天小編就為大家分享一篇解決python3 安裝不了PIL的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 如何創(chuàng)建一個(gè)Flask項(xiàng)目并進(jìn)行簡單配置

    如何創(chuàng)建一個(gè)Flask項(xiàng)目并進(jìn)行簡單配置

    這篇文章主要介紹了如何創(chuàng)建一個(gè)Flask項(xiàng)目并進(jìn)行簡單配置,幫助大家更好的理解和學(xué)習(xí)flask框架,感興趣的朋友可以了解下
    2020-11-11
  • 如何使用 Python 中的功能和庫創(chuàng)建 n-gram

    如何使用 Python 中的功能和庫創(chuàng)建 n-gram

    在計(jì)算語言學(xué)中,n-gram 對(duì)于語言處理、上下文和語義分析非常重要,它們是從令牌字符串中相鄰的連續(xù)單詞序列,本文將討論如何使用 Python 中的功能和庫創(chuàng)建 n-gram,感興趣的朋友一起看看吧
    2023-09-09
  • 淺談pandas.cut與pandas.qcut的使用方法及區(qū)別

    淺談pandas.cut與pandas.qcut的使用方法及區(qū)別

    這篇文章主要介紹了淺談pandas.cut與pandas.qcut的使用方法及區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python tkinter label 更新方法

    Python tkinter label 更新方法

    今天小編就為大家分享一篇Python tkinter label 更新方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python圖像處理之Hough圓形檢測(cè)

    Python圖像處理之Hough圓形檢測(cè)

    霍夫變換是一種特征檢測(cè)(feature extraction),被廣泛應(yīng)用在圖像分析,本文將利用Hough變換實(shí)現(xiàn)圓形檢測(cè),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-07-07
  • matplotlib制作雷達(dá)圖報(bào)錯(cuò)ValueError的實(shí)現(xiàn)

    matplotlib制作雷達(dá)圖報(bào)錯(cuò)ValueError的實(shí)現(xiàn)

    這篇文章主要介紹了matplotlib制作雷達(dá)圖報(bào)錯(cuò)ValueError的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論

华亭县| 遂溪县| 青神县| 泌阳县| 稷山县| 偃师市| 台南县| 石楼县| 开远市| 旬阳县| 钦州市| 临沧市| 江油市| 邵阳市| 盐亭县| 平塘县| 大埔县| 平顶山市| 神池县| 陇南市| 雅江县| 阿瓦提县| 沾益县| 邹平县| 天津市| 泽普县| 广昌县| 金乡县| 阜南县| 子洲县| 宾川县| 佛学| 五指山市| 日照市| 临夏县| 鸡西市| 西畴县| 赤城县| 连城县| 重庆市| 睢宁县|