01.17 想錄個屏還得下軟件?讓我們用python來自己做一個吧


想錄個屏還得下軟件?讓我們用python來自己做一個吧


一、寫在前面

作為一名測試,有時候經常會遇到需要錄屏記錄自己操作,方便後續開發同學定位。以前都是用ScreenToGif來錄屏製作成動態圖,偶爾的機會看到python也能實現。那就趕緊學習下。

二、效果展示

想錄個屏還得下軟件?讓我們用python來自己做一個吧

三、知識串講

這次要講的東西可能比較多了,涉及到pyqt5 GUI軟件的製作、QThread多線程的使用、Sikuli庫的圖形操作、win32庫的模擬鍵盤操作、cv2庫的寫視頻文件等。下面我們一點點來蠶食我這次寫的代碼。

1、GUI界面製作

這次我用的是現成的Pyqt5界面佈局類,QVBoxLayout。這個類可以快速協助我完成按鈕的垂直分佈,而且按鈕添加也更方便。

想錄個屏還得下軟件?讓我們用python來自己做一個吧

兩行代碼就完成了按鈕的命名和添加。我之前玩qt時,用的都是qt的UI界面,對應生成的組件代碼也比較複雜。因此,在開發一些少量按鈕、簡單佈局時可以用QVBoxLayout類。如果喜歡水平佈局,可以用QHBoxLayout類,使用方法是一樣的。

另外,在按鈕點擊關聯的功能函數,即work()方法時,如果想帶參數,可以通過lambda匿名函數來實現。這 也是個小技巧。

想錄個屏還得下軟件?讓我們用python來自己做一個吧

2、QThread類的多線程使用

因為錄屏工具有開始和停止兩個功能,一開始時我用的是單線程,發現工具就會卡死。查了一些資料,發現針對這種情況,應該要使用多線程來實現,而QT庫中本身就有多線程類--QThread。

使用方法是通過繼承QThread類,重寫run方法來實現的。

(但是其實這種使用方法,QT大神們是不贊成這樣使用的,我會在第2篇文章中再簡單說明更好的多線程使用方法)

這 裡要注意,work()函數必須是Ui_Mainwindow類方法,因為如果不是類方法,會在運行GUI時導致生命週期直接結束,導致錄屏代碼沒見運行就報錯退出。

想錄個屏還得下軟件?讓我們用python來自己做一個吧

3、sikuli庫圖形識別

由於這個庫的使用方法和介紹,我在之前的博客裡已經提過 了。因此只簡單地呈現下代碼。這段代碼主要是為了自定義錄屏時,可以獲取選擇範圍的座標值,並傳值給recording函數,從而完成自定義錄屏功能。

想錄個屏還得下軟件?讓我們用python來自己做一個吧

4、win32庫模擬鍵盤操作

其實這個庫不用也是可以的,我為什麼要用呢?主要是為了方便用戶在進行錄屏時,能自動將工具界面縮小。一切為了用戶嘛!

以下這段代碼 是為了縮小工具窗口,其中91表示左win鍵,40表示方向向下鍵。****即win+向下鍵是可以實現窗口縮小功能的。****keybd_event(91, 0, 0, 0)表示按下win鍵,

keybd_event(91, 0, win32con.KEYEVENTF_KEYUP, 0)則是鬆開win鍵。

另外,這裡為什麼要加 上sleep(0.5)?這是因為在按下win鍵後要延遲按方向鍵,不然是 不起作用的。

想錄個屏還得下軟件?讓我們用python來自己做一個吧

5、錄屏主代碼

這段代碼其實網上已經有很多類似的代碼,並且我已經加了註釋,相信大家應該能理解。這裡我想註明下的是:如何停止錄屏。


如果大家有去 網上查如何停止錄屏的方法,很多人都會寫以下代碼:

想錄個屏還得下軟件?讓我們用python來自己做一個吧

然後告訴你,按q鍵就會停止錄屏。但是你會發現,實際情況根本停止不了,為什麼呢?因為還 有一句屏幕顯示的代碼:

想錄個屏還得下軟件?讓我們用python來自己做一個吧

如果你不親自執行一次,你以為會萬事大吉,但你錯了。這樣寫,會導致你的電腦屏幕被每一幀畫面給撐暴!因為用的while True,因此每一幀畫面都會顯示,即1S 25幀畫面會不停地顯示在你桌面上!

很多小夥伴在學習Python的過程中往往因為沒有資料或者沒人指導從而導致自己不想學下去了,因此我特意準備了大量的PDF書籍、視頻教程,都免費送給大家!

不管你是零基礎還是有基礎都可以獲取到自己相對應的學習禮包!

包括Python軟件工具和2019最新入門到實戰教程,(https://url.cn/59RWE1Z)複製到瀏覽器打開!

因此,綜上的問題,我採用了一種取巧的方法:在錄屏開始時生成一個標記文件,通過標記文件是否被刪除來判斷是否要停止錄屏功能。

四、示例代碼

1、工具GUI界面代碼:

想錄個屏還得下軟件?讓我們用python來自己做一個吧

想錄個屏還得下軟件?讓我們用python來自己做一個吧

2、錄屏函數

想錄個屏還得下軟件?讓我們用python來自己做一個吧


五、總結

至此,基本實現了錄屏小工具的代碼開發。但是如果你是對代碼中的相關庫不熟悉,或者都沒下載相關的庫,那我相信你還會遇到很多坑。因此,為了方便一些小夥伴能快速把代碼跑起來,我將在下一篇文章中講講我在開發時遇到的一些坑,方便大家能避免這些問題。好了,今天就先到這裡!Bye!


分享到:


相關文章: