Skip to content

Commit 632a90e

Browse files
committed
add 29
1 parent 3057d7e commit 632a90e

File tree

4 files changed

+180
-1
lines changed

4 files changed

+180
-1
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,6 @@
5050

5151
* p28_鼠标事件 [源码下载](p28_鼠标事件) [博文地址](https://xugaoxiang.com/2022/05/15/pyqt5-28-mouse-event/)
5252

53-
* p29_键盘事件 [源码下载](p29_键盘事件) [博文地址](https://xugaoxiang.com/2022/05/31/pyqt5-29-keyboard-event/)
53+
* p29_键盘事件 [源码下载](p29_键盘事件) [博文地址](https://xugaoxiang.com/2022/05/31/pyqt5-29-keyboard-event/)
54+
55+
* p30_屏幕录制 [源码下载](p30_屏幕录制) [博文地址](https://xugaoxiang.com/2022/09/13/pyqt5-30-record/)

p30_屏幕录制/main.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import sys
2+
import numpy as np
3+
import cv2
4+
from PIL import ImageGrab
5+
from threading import Thread
6+
7+
from PyQt5.QtWidgets import QMainWindow, QApplication
8+
9+
from ui import Ui_MainWindow
10+
11+
12+
class MainWindow(QMainWindow, Ui_MainWindow):
13+
14+
def __init__(self, parent=None):
15+
super(MainWindow, self).__init__(parent)
16+
self.setupUi(self)
17+
18+
# 标志位
19+
self.record_flag = False
20+
21+
self.pushButton_start.clicked.connect(self.start)
22+
self.pushButton_stop.clicked.connect(self.stop)
23+
24+
def start(self):
25+
self.pushButton_start.setEnabled(False)
26+
self.pushButton_stop.setEnabled(True)
27+
28+
# 开启线程
29+
self.th = Thread(target=self.start_recording)
30+
self.th.start()
31+
32+
def start_recording(self):
33+
img = ImageGrab.grab()
34+
print('type: {}'.format(type(img)))
35+
width, height = img.size
36+
fourcc = cv2.VideoWriter_fourcc(*'XVID')
37+
fps = 30
38+
out = cv2.VideoWriter('record.avi', fourcc, fps, (width, height))
39+
40+
while True:
41+
img = ImageGrab.grab()
42+
img_cv = cv2.cvtColor(np.array(img), cv2.COLOR_BGR2RGB)
43+
out.write(img_cv)
44+
45+
if self.record_flag:
46+
out.release()
47+
break
48+
49+
def stop(self):
50+
self.record_flag = True
51+
self.pushButton_start.setEnabled(True)
52+
self.pushButton_stop.setEnabled(False)
53+
54+
55+
if __name__ == '__main__':
56+
app = QApplication(sys.argv)
57+
windows = MainWindow()
58+
windows.show()
59+
sys.exit(app.exec_())

p30_屏幕录制/project.ui

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>MainWindow</class>
4+
<widget class="QMainWindow" name="MainWindow">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>800</width>
10+
<height>600</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>MainWindow</string>
15+
</property>
16+
<widget class="QWidget" name="centralwidget">
17+
<widget class="QPushButton" name="pushButton_start">
18+
<property name="geometry">
19+
<rect>
20+
<x>170</x>
21+
<y>190</y>
22+
<width>161</width>
23+
<height>91</height>
24+
</rect>
25+
</property>
26+
<property name="font">
27+
<font>
28+
<family>Adobe Devanagari</family>
29+
<pointsize>14</pointsize>
30+
</font>
31+
</property>
32+
<property name="text">
33+
<string>开始录屏</string>
34+
</property>
35+
</widget>
36+
<widget class="QPushButton" name="pushButton_stop">
37+
<property name="geometry">
38+
<rect>
39+
<x>410</x>
40+
<y>190</y>
41+
<width>161</width>
42+
<height>91</height>
43+
</rect>
44+
</property>
45+
<property name="font">
46+
<font>
47+
<family>Adobe Devanagari</family>
48+
<pointsize>14</pointsize>
49+
</font>
50+
</property>
51+
<property name="text">
52+
<string>结束录屏</string>
53+
</property>
54+
</widget>
55+
</widget>
56+
<widget class="QMenuBar" name="menubar">
57+
<property name="geometry">
58+
<rect>
59+
<x>0</x>
60+
<y>0</y>
61+
<width>800</width>
62+
<height>26</height>
63+
</rect>
64+
</property>
65+
</widget>
66+
<widget class="QStatusBar" name="statusbar"/>
67+
</widget>
68+
<resources/>
69+
<connections/>
70+
</ui>

p30_屏幕录制/ui.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# -*- coding: utf-8 -*-
2+
3+
# Form implementation generated from reading ui file '.\project.ui'
4+
#
5+
# Created by: PyQt5 UI code generator 5.9.2
6+
#
7+
# WARNING! All changes made in this file will be lost!
8+
9+
from PyQt5 import QtCore, QtGui, QtWidgets
10+
11+
class Ui_MainWindow(object):
12+
def setupUi(self, MainWindow):
13+
MainWindow.setObjectName("MainWindow")
14+
MainWindow.resize(800, 600)
15+
self.centralwidget = QtWidgets.QWidget(MainWindow)
16+
self.centralwidget.setObjectName("centralwidget")
17+
self.pushButton_start = QtWidgets.QPushButton(self.centralwidget)
18+
self.pushButton_start.setGeometry(QtCore.QRect(170, 190, 161, 91))
19+
font = QtGui.QFont()
20+
font.setFamily("Adobe Devanagari")
21+
font.setPointSize(14)
22+
self.pushButton_start.setFont(font)
23+
self.pushButton_start.setObjectName("pushButton_start")
24+
self.pushButton_stop = QtWidgets.QPushButton(self.centralwidget)
25+
self.pushButton_stop.setGeometry(QtCore.QRect(410, 190, 161, 91))
26+
font = QtGui.QFont()
27+
font.setFamily("Adobe Devanagari")
28+
font.setPointSize(14)
29+
self.pushButton_stop.setFont(font)
30+
self.pushButton_stop.setObjectName("pushButton_stop")
31+
MainWindow.setCentralWidget(self.centralwidget)
32+
self.menubar = QtWidgets.QMenuBar(MainWindow)
33+
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
34+
self.menubar.setObjectName("menubar")
35+
MainWindow.setMenuBar(self.menubar)
36+
self.statusbar = QtWidgets.QStatusBar(MainWindow)
37+
self.statusbar.setObjectName("statusbar")
38+
MainWindow.setStatusBar(self.statusbar)
39+
40+
self.retranslateUi(MainWindow)
41+
QtCore.QMetaObject.connectSlotsByName(MainWindow)
42+
43+
def retranslateUi(self, MainWindow):
44+
_translate = QtCore.QCoreApplication.translate
45+
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
46+
self.pushButton_start.setText(_translate("MainWindow", "开始录屏"))
47+
self.pushButton_stop.setText(_translate("MainWindow", "结束录屏"))
48+

0 commit comments

Comments
 (0)