怎么使用Python来做一个屏幕录制工具

  介绍

这篇文章主要介绍了怎么使用Python来做一个屏幕录制工具,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

Python的数据类型有哪些吗?

python的数据类型:1。数字类型,包括int(整型),长(长整型)和浮子(浮点型)。2。字符串,分别是str类型和unicode类型。3。布尔型,Python布尔类型也是用于逻辑运算,有两个值:True(真)和虚假的(假)。4。列表,列表是Python中使用最频繁的数据类型,集合中可以放任何数据类型。5。元组,元组用“()”标识,内部元素用逗号隔开。6。字,字典典是一种键值对的集合。7。集合,集合是一个无序的,不重复的数据组合。

<强>一,写在前面

作为一名测试,有时候经常会遇到需要录屏记录自己操作,方便后续开发同学定位。以前都是用ScreenToGif来录屏制作成动态图,偶尔的机会看到python也能实现。

<强>二、效果展示

怎么使用python来做一个屏幕录制工具

<强>三,知识串讲

这次要讲的东西可能比较多了,涉及到pyqt5 GUI软件的制作,QThread多线程的使用,Sikuli库的图形操作,win32库的模拟键盘操作,cv2库的写视频文件等。下面我们一点点来蚕食我这次写的代码。

1, GUI界面制作

这次我用的是现成的pyqt5界面布局类,QVBoxLayout。这个类可以快速协助我完成按钮的垂直分布,而且按钮添加也更方便。

button1 =, QPushButton(“自定义录屏“)   layout.addWidget (button1)

两行代码就完成了按钮的命名和添加。我之前玩qt时,用的都是qt的UI界面,对应生成的组件代码也比较复杂,因此,在开发一些少量按钮,简单布局时可以用QVBoxLayout类。如果喜欢水平布的局,可以用QHBoxLayout类,使用方法是一样的。

另外,在按钮点击关联的功能函数,即工作()方法时,如果想带参数,可以通过λ匿名函数来实现。这也是个小技巧。

#,不带参数   button1.clicked.connect (self.work)   #,带参数   button1.clicked.connect(λ:self.work (1)

2, QThread类的多线程使用

因为录屏工具有开始和停止两个功能,一开始时我用的是单线程,发现工具就会卡死,查了一些资料,发现针对这种情况,应该要使用多线程来实现,而QT库中本身就有多线程类——QThread。

使用方法是通过继承QThread类,重写运行方法来实现的。

(但是其实这种使用方法,QT大神们是不赞成这样使用的,我会在第2篇文章中再简单说明更好的多线程使用方法)

这里要注意,工作()函数必须是Ui_Mainwindow类方法,因为如果不是类方法,会在运行GUI时导致生命周期直接结束,导致录屏代码没见运行就报错退出。

class  WorkThread (QThread):   def 才能__init__(自我,,n):   ,,,超级(WorkThread,,自我). __init__ ()   ,,,self.n =n      def 才能运行(自我):   ,,,XXXXX

3, sikuli库图形识别

由于这个库的使用方法和介绍,我在之前的博客里已经提过了,因此只简单地呈现下代码。这段代码主要是为了自定义录屏时,可以获取选择范围的坐标值,并传值给记录函数,从而完成自定义录屏功能。

def  SelectRegion ():   时间=jvmPath 才能;jpype.get_default_jvm_path ()   jpype.startJVM才能(jvmPath, & # 39; ea # 39;,, & # 39; -Djava.class.path=F: \ \ \ \ sikulixapi.jar& sikuli \ \ 1 # 39;), #加载jar包路径   Screen 才能=,jpype.JClass (& # 39; org.sikuli.script.Screen& # 39;)   myscreen 才能=,屏幕()   时间=region 才能;myscreen.selectRegion(), #,自定义获取屏幕范围   return 才能;地区

4, win32库模拟键盘操作

其实这个库不用也是可以的,我为什么要用呢?主要是为了方便用户在进行录屏时,能自动将工具界面缩小,一切为了用户嘛!

以下这段代码是为了缩小工具窗口,其中91表示左赢得键,40表示方向向下键。* * * *即win +向下键是可以实现窗口缩小功能的。* * * * keybd_event(91, 0, 0, 0)表示按下键,

keybd_event (91 0, win32con。KEYEVENTF_KEYUP,0)则是松键开赢。

另外,这里为什么要加上睡眠(0.5)?这是因为在按下赢得键后要延迟按方向键,不然是不起作用的。

def  Minimize_Window ():   win32api.keybd_event才能(91,0,0,0)   time . sleep(0.5)才能   win32api.keybd_event才能(40岁,0,0,0)   time . sleep(0.5)才能   win32api.keybd_event才能(91,0,,win32con.KEYEVENTF_KEYUP,, 0)   win32api.keybd_event才能(win32con.KEYEVENTF_KEYUP, 40岁,0,0)

怎么使用Python来做一个屏幕录制工具