PyQt5 series of tutorials (thirty) screen recording

Software and hardware environment

  • Windows 10 64bit
  • Anaconda3 with python 3.8
  • PyQt5 5.15


This article is to achieve screen recording. Here we use pillow , opencv and numpy to achieve it. By grabbing a frame of screen image, then converting it into numpy data, then converting it into opencv format, and finally storing it, and so on. .


First install the required libraries

 pip install pillow opencv-python numpy

Next look at the code

 import sys import numpy as np import cv2 from PIL import ImageGrab from threading import Thread from PyQt5.QtWidgets import QMainWindow, QApplication from ui import Ui_MainWindow class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setupUi(self) # 标志位self.record_flag = False # 绑定信号与槽self.pushButton_start.clicked.connect(self.start) self.pushButton_stop.clicked.connect(self.stop) def start(self): self.pushButton_start.setEnabled(False) self.pushButton_stop.setEnabled(True) # 开启线程 = Thread(target=self.start_recording) def start_recording(self): # 抓取一张图,得到宽和高img = ImageGrab.grab() width, height = img.size fourcc = cv2.VideoWriter_fourcc(*'XVID') fps = 30 out = cv2.VideoWriter('record.avi', fourcc, fps, (width, height)) while True: img = ImageGrab.grab() img_cv = cv2.cvtColor(np.array(img), cv2.COLOR_BGR2RGB) out.write(img_cv) if self.record_flag: out.release() break def stop(self): self.record_flag = True self.pushButton_start.setEnabled(True) self.pushButton_stop.setEnabled(False) if __name__ == '__main__': app = QApplication(sys.argv) windows = MainWindow() sys.exit(app.exec_())

Source code download

PyQt5 series of tutorials

For more PyQt5 tutorials, please move

This article is reproduced from
This site is for inclusion only, and the copyright belongs to the original author.