用Python寫一個像QQ可快捷鍵喚起區域截圖的應用

王平發表於2019-03-01

這是Python小軟體系列文章,關注猿人學的老朋友知道我寫的Python文章可歸納為:Python爬蟲掙錢系列、Python爬蟲小偏方系列、Python非同步IO系列、Python小軟體系列等,我在這些系列中交替著寫,今天寫一個截圖的小應用。

python寫一個帶快捷鍵和圖形介面的截圖程式

1.截圖應用功能拆解

先把要實現哪些功能羅列一下,功能拆解好了,程式設計時就比較清晰。

1).首先要能響應快捷鍵調起截圖程式,像QQ使用Ctrl+shift+B可以截圖一樣;

2).然後就是截圖功能,可以用滑鼠選取擷取的區域;

3).最後是要把截圖儲存為本地圖片。

2.做一下技術調研

功能拆解出來了,就開始調查下實現難度,有沒有現成的第三方庫可用,Python是出了名的庫多,多找一找總會找到的。

搜尋了一下Python有截圖功能的庫,基本都是全屏截圖和程式輸入座標來區域截圖,沒辦法用滑鼠選擇視覺化截圖。不過網上有同學提出透過寫一個GUI程式,把全屏截圖展示在這個GUI介面上,然後在GUI上可以實現滑鼠視覺化選取功能。

看起來還不錯,因為之前用過Tkinter,所以就用Tkinter來做GUI了,不過很久沒寫,手也生得很。

Tkinkter可以監聽鍵盤事件,但是隻有當焦點在Tkinter上時才會響應鍵盤事件,而截圖應用是截其他地方的圖,比如瀏覽器,聊天軟體等等,焦點這時肯定不在Tkinter上,所以需要另找一個可以全域性監聽鍵盤事件的庫,pynput就進入了法眼。

跟截圖圖片處理的話,首先就想到PIL庫,它的ImageGrab方法能夠全域性截圖,也能傳入座標實現區域截圖,就選PIL了。

一番搜尋下來確定了實現方法:

使用pynput庫來監聽鍵盤,使用Tkinter來做GUI,使用PIL的ImageGrab來截圖。

詳細的實現原理是:

當程式執行起來後就在後臺監聽鍵盤,當鍵盤按下ctrl+shift+M時就使用PIL做全屏截圖,接著用Tkinter把全屏截圖顯示出來,透過Tkinter的畫布(canvas)和滑鼠選取做二次截圖。

3.開始寫截圖程式碼了

pynput、Tkinter、PIL官方和網上都有示例,拿過來改一改,把他們邏輯串在一起就可以除錯了。(我只是大自然的搬運工)

監聽鍵盤程式碼如下:

截圖程式監聽鍵盤程式碼

截圖、呼叫TK、二次截圖主邏輯如下:

截圖程式主邏輯程式碼

想加一個演示效果的,結果錄屏軟體弄了很久,影片解析度都不理想,汗!

100多行程式碼搞定快捷鍵截圖功能,這就是用Python的好處,各種小功能都有解決方案,主要花的事情是拆解功能,選定實現路徑。

不過這樣由於是做了兩次截圖,第一次全屏截圖,第二次是在全屏截圖上再截圖,所以儲存下來的圖片不太清晰。

原始碼請在猿人學Python公眾號後臺回覆:jietu

 

python小軟體系列閱讀:

用Python給我家寶寶寫個小軟體

給寶寶的翻譯小軟體(續):支援PDF啦!

在手機上如何執行Python程式

 

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章