diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 0b8c959..0000000 --- a/.gitignore +++ /dev/null @@ -1,53 +0,0 @@ -# ---> Eagle -# Ignore list for Eagle, a PCB layout tool - -# Backup files -*.s#? -*.b#? -*.l#? -*.b$? -*.s$? -*.l$? - -# Eagle project file -# It contains a serial number and references to the file structure -# on your computer. -# comment the following line if you want to have your project file included. -eagle.epf - -# Autorouter files -*.pro -*.job - -# CAM files -*.$$$ -*.cmp -*.ly2 -*.l15 -*.sol -*.plc -*.stc -*.sts -*.crc -*.crs - -*.dri -*.drl -*.gpi -*.pls -*.ger -*.xln - -*.drd -*.drd.* - -*.s#* -*.b#* - -*.info - -*.eps - -# file locks introduced since 7.x -*.lck - diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 204b93d..0000000 --- a/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -MIT License Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice (including the next -paragraph) shall be included in all copies or substantial portions of the -Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS -OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index 426989f..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Information_Management_System - diff --git a/Screenshot/Audio_record.py b/Screenshot/Audio_record.py deleted file mode 100644 index 89f3561..0000000 --- a/Screenshot/Audio_record.py +++ /dev/null @@ -1,133 +0,0 @@ -import time -import wave -from pathlib import Path -from threading import Thread - -from pyaudio import PyAudio, paInt16, paContinue, paComplete - - -class AudioRecord(PyAudio): - - def __init__(self, channels=2): - super().__init__() - self.chunk = 1024 # 每个缓冲区的帧数 - self.format_sample = paInt16 # 采样位数 - self.channels = channels # 声道: 1,单声道;2,双声道 - self.fps = 44100 # 采样频率 - self.input_dict = None - self.output_dict = None - self.stream = None - self.filename = '~test.wav' - self.wf = None - self.stop_flag = False - self.kill = False - - def callback_input(self, in_data, frame_count, time_info, status): - """录制回调函数""" - self.wf.writeframes(in_data) - if not self.stop_flag: - return (in_data, paContinue) - else: - return (in_data, paComplete) - - def callback_output(self, in_data, frame_count, time_info, status): - """播放回调函数""" - data = self.wf.readframes(frame_count) - return (data, paContinue) - - def open_stream(self, name): - """打开录制流""" - input_device_index = self.get_device_index(name, True) if name else None - return self.open(format=self.format_sample, - channels=self.channels, - rate=self.fps, - frames_per_buffer=self.chunk, - input=True, - input_device_index=input_device_index, - stream_callback=self.callback_input - ) - - def audio_record_run(self, name=None): - """音频录制""" - self.wf = self.save_audio_file(self.filename) - self.stream = self.open_stream(name) - self.stream.start_stream() - while self.stream.is_active(): - time.sleep(0.1) - self.wf.close() - if self.kill: - Path(self.filename).unlink() - self.duration = self.get_duration() - self.terminate_run() - - def run(self, filename=None, name=None, record=True): - """音频录制启动""" - if record: - if filename: - self.filename = filename - thread_1 = Thread(target=self.audio_record_run, args=(name,)) - else: - if not filename: - raise Exception('未输入音频文件名,不能播放,请输入后再试!') - thread_1 = Thread(target=self.read_audio, args=(filename, name,)) - thread_1.start() - - def read_audio(self, filename, name=None): - """音频播放""" - output_device_index = self.get_device_index(name, False) if name else None - with wave.open(filename, 'rb') as self.wf: - # 获取音频长度 - self.duration = self.get_duration() - self.stream = self.open(format=self.get_format_from_width(self.wf.getsampwidth()), - channels=self.wf.getnchannels(), - rate=self.wf.getframerate(), - output=True, - output_device_index=output_device_index, - stream_callback=self.callback_output - ) - self.stream.start_stream() - while self.stream.is_active(): - time.sleep(0.1) - print(self.duration) - self.terminate_run() - - def get_duration(self): - """获取音频时长""" - return round(self.wf.getnframes() / self.wf.getframerate(), 2) - - def get_in_out_devices(self): - """获取系统输入输出设备""" - self.input_dict = {} - self.output_dict = {} - for i in range(self.get_device_count()): - devinfo = self.get_device_info_by_index(i) - if not devinfo['hostApi'] and int(devinfo['defaultSampleRate']) == self.fps \ - and '映射器' not in devinfo['name']: - if devinfo['maxInputChannels']: - self.input_dict[devinfo['name'].split(' ')[0]] = i - elif devinfo['maxOutputChannels']: - self.output_dict[devinfo['name'].split(' ')[0]] = i - - def get_device_index(self, name, inp=True): - """获取选定设备索引""" - if inp and self.input_dict: - return self.input_dict.get(name, -1) - elif not inp and self.output_dict: - return self.output_dict.get(name, -1) - - def save_audio_file(self, filename): - """音频文件保存""" - wf = wave.open(filename, 'wb') - wf.setnchannels(self.channels) - wf.setsampwidth(self.get_sample_size(self.format_sample)) - wf.setframerate(self.fps) - return wf - - def terminate_run(self): - """结束流录制或流播放""" - if self.stream is not None: - self.stream.stop_stream() - self.stream.close() - self.stream = None - self.wf = None - self.terminate() diff --git a/Screenshot/PyAudio-0.2.11-cp37-cp37m-win_amd64.whl b/Screenshot/PyAudio-0.2.11-cp37-cp37m-win_amd64.whl deleted file mode 100644 index 72fbfc8..0000000 Binary files a/Screenshot/PyAudio-0.2.11-cp37-cp37m-win_amd64.whl and /dev/null differ diff --git a/Screenshot/README.md b/Screenshot/README.md deleted file mode 100644 index 4aa3f83..0000000 --- a/Screenshot/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# 使用python动手做一个屏幕录制工具 - -*更新日期:2022-04-20* -> windows 10 -> python 3.7 - -- Screeshot_Gui.exe [58.5M] [下载地址](https://github.com/lk-itween/FunnyCodeRepository/releases/download/Screenshot_Gui/Screenshot_Gui.exe) -先将ffmpeg.exe压缩成7z格式,再一并打包进入exe文件中,且使用pyinstaller打包,生成文件较大 - -- Screenshot_Gui.py -pyqt5制作的屏幕录制窗口,窗口程序入口 - -- Screenshot_record.py -使用ffmpeg工具,利用python调用ffmpeg命令行来录制屏幕 - -- Audio_record.py -pyaudio读取可录制音频设备,设定需要使用的设备进行录制音频 - -- Screenshot_record_with_cv2.py -使用opencv-python录制视频并保存 - -- Screenshot_test.py -无窗口化测试联动屏幕录制及音频录制,保持音视频同时录制和同时停止录制 - -- resource -保存程序运行过程中需要使用到的程序或图片 - -- requirements.txt -已将所需模块放在requirements.txt中,可直接pip install -r requirements.txt下载安装。 - -- PyAudio-0.2.11-cp37-cp37m-win_amd64.whl -python3.7环境的PyAudio的轮子 - - -**ps:** -*1. ffmpeg.exe 请至此https://www.gyan.dev/ffmpeg/builds/#release-builds 下载符合的版本,并解压将bin下的ffmpeg.exe移动到resource文件夹下* -*2. 如果PyAudio包不能使用pip在线安装,python3.7环境请下载PyAudio-0.2.11-cp37-cp37m-win_amd64.whl至本地,在该路径下打开cmd窗口,执行pip install 该whl文件* -*3. 其他python环境可在https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio 下自行安装对应版本的whl文件* - diff --git a/Screenshot/Screenshot_Gui.py b/Screenshot/Screenshot_Gui.py deleted file mode 100644 index d876d01..0000000 --- a/Screenshot/Screenshot_Gui.py +++ /dev/null @@ -1,358 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'Screenshot_GUI.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -import shutil -import sys -from datetime import datetime -from pathlib import Path - -from PIL import ImageGrab -from PyQt5.QtCore import QRect, Qt, QPoint, QMetaObject, QThread -from PyQt5.QtGui import QIcon, QFont, QColor, QImage, QPixmap, QPen, QPainter -from PyQt5.QtWidgets import (QMainWindow, QApplication, QDesktopWidget, QWidget, QFrame, - QLabel, QPushButton, QComboBox, QCheckBox, QSpinBox, QDialog, QFileDialog, QMessageBox) -from py7zr import pack_7zarchive, unpack_7zarchive - -from Screenshot.Audio_record import AudioRecord -from Screenshot.Screenshot_record import Screenshot, file_path - - -def unpack_7zip_to_exe(filename): - file_basename = Path(file_path(f'{filename}.exe')) - if file_basename.exists(): - return True - elif file_basename.with_suffix('.7z').exists(): - shutil.unpack_archive(file_basename.with_suffix('.7z'), file_basename.parent) - return unpack_7zip_to_exe(file_basename.stem) - else: - return False - -class Thread_screenshot(QThread): - - def __init__(self): - super().__init__() - self.offset_x = 0 - self.offset_y = 0 - self.draw_mouse = 1 - self.filename = '' - self.screen = Screenshot() - - def config_modify(self, **kwargs): - self.screen.width = kwargs.get('width', self.screen.width) - self.screen.height = kwargs.get('height', self.screen.height) - self.screen.fps = kwargs.get('fps', self.screen.fps) - self.offset_x = kwargs.get('offset_x', self.offset_x) - self.offset_y = kwargs.get('offset_y', self.offset_y) - self.draw_mouse = kwargs.get('draw_mouse', self.draw_mouse) - self.filename = kwargs.get('filename', self.filename) - - def compose(self): - video = self.filename + '.mp4' - audio = self.filename + '.mp3' - self.screen.compose_audio(video, audio, video.replace('缓存', '')) - QThread.sleep(1) - self.stop() - Path(audio).unlink() - Path(video).unlink() - - def run(self): - if not self.filename: - raise Exception('请输入filename!') - filename = self.filename + '.mp4' - self.screen.record(filename, self.offset_x, self.offset_y, self.draw_mouse) - - def stop(self): - self.screen.terminate() - - -class Ui_MainWindow1(QMainWindow): - """主体窗口设置""" - - def __init__(self): - super().__init__() - self.setObjectName("MainWindow") - self.setWindowTitle('屏幕录制') - windowico = file_path('gui_svg.svg') - self.setWindowIcon(QIcon(windowico)) - self.resize(512, 352) - self.setFixedSize(512, 352) - self._dir = '.' - self.fname = '' - self.offset_x, self.offset_y = 0, 0 - self.screen_x, self.screen_y = ImageGrab.grab().size - self.audio = AudioRecord() - self.audio.get_in_out_devices() - self.device_name = None - self.record_audio = True if self.audio.input_dict else False - self.hotkey_start = False - self.screenshot = Thread_screenshot() - self.setupUi() - ffmpeg_exists = unpack_7zip_to_exe('ffmpeg') - if not ffmpeg_exists: - QMessageBox.warning(self, '请下载ffmpeg!', '请将ffmpeg.exe放在resource目录下再录制!') - self.show() - - def setupUi(self): - self.centralwidget = QWidget(self) - self.centralwidget.setObjectName("centralwidget") - self.label0 = QLabel(self.centralwidget) - self.label0.setGeometry(QRect(0, 0, 421, 351)) - self.label0.setObjectName("scrollArea") - # 添加边框 - self.label0.setFrameShape(QFrame.Box) - self.label0.setFrameShadow(QFrame.Sunken) - self.get_screen_grab((0, 0, self.screen_x, self.screen_y)) - self.label0.setAlignment(Qt.AlignCenter) - self.label_1 = QLabel(self.centralwidget) - font = QFont() - font.setBold(True) - self.label_1.setGeometry(QRect(430, 0, 85, 31)) - self.label_1.setTextFormat(Qt.AutoText) - self.label_1.setFont(font) - self.label_1.setScaledContents(True) - self.label_1.setObjectName("屏幕录制器") - self.label_6 = QLabel(self.centralwidget) - self.label_6.setGeometry(QRect(430, 20, 85, 31)) - self.label_6.setTextFormat(Qt.AutoText) - self.label_6.setScaledContents(True) - self.label_6.setObjectName("注释1") - self.checkbox = QCheckBox(self.centralwidget) - self.checkbox.setGeometry(QRect(430, 100, 85, 20)) - self.checkbox.setChecked(True) - self.checkbox.stateChanged.connect(self.mouse_draw) - self.checkbox.setObjectName("录制鼠标") - self.comboBox = QComboBox(self.centralwidget) - self.comboBox.setGeometry(QRect(430, 200, 85, 20)) - self.comboBox.setEditable(False) - self.comboBox.addItems(self.audio.input_dict.keys()) - self.comboBox.addItems(['无']) - self.comboBox.setMaxVisibleItems(9) - self.comboBox.currentTextChanged.connect(self.change_combox) - self.comboBox.setObjectName("音频来源") - self.comboBox_3 = QComboBox(self.centralwidget) - self.comboBox_3.setGeometry(QRect(430, 260, 80, 20)) - self.comboBox_3.addItems(['双声道', '单声道']) - self.comboBox_3.currentIndexChanged.connect(self.change_combox) - self.comboBox_3.setObjectName("声道设置") - self.pushButton = QPushButton(self.centralwidget) - self.pushButton.setGeometry(QRect(470, 320, 41, 31)) - self.pushButton.clicked.connect(self.stop) - self.pushButton.setObjectName("停止") - self.pushButton_2 = QPushButton(self.centralwidget) - self.pushButton_2.setGeometry(QRect(430, 320, 41, 31)) - self.pushButton_2.setObjectName("开始") - self.pushButton_2.clicked.connect(self.start) - self.pushButton_3 = QPushButton(self.centralwidget) - self.pushButton_3.setGeometry(QRect(430, 290, 80, 23)) - self.pushButton_3.setObjectName("保存目录") - self.pushButton_3.clicked.connect(self.open_dirpath) - self.pushButton_4 = QPushButton(self.centralwidget) - self.pushButton_4.setGeometry(QRect(430, 70, 80, 23)) - self.pushButton_4.setCheckable(True) - self.pushButton_4.setObjectName("Size") - self.pushButton_4.clicked.connect(self.get_screen_area) - self.spinBox = QSpinBox(self.centralwidget) - self.spinBox.setValue(15) - self.spinBox.setRange(10, 60) - self.spinBox.setGeometry(QRect(430, 145, 80, 20)) - self.spinBox.valueChanged.connect(self.screen_fps_mofify) - self.spinBox.setObjectName("spinBox") - self.label_2 = QLabel(self.centralwidget) - self.label_2.setGeometry(QRect(430, 50, 54, 16)) - self.label_2.setTextFormat(Qt.AutoText) - self.label_2.setObjectName("选择区域") - self.label_3 = QLabel(self.centralwidget) - self.label_3.setGeometry(QRect(430, 125, 54, 16)) - self.label_3.setObjectName("帧率") - self.label_4 = QLabel(self.centralwidget) - self.label_4.setGeometry(QRect(430, 240, 54, 16)) - self.label_4.setObjectName("声道设置") - self.label_5 = QLabel(self.centralwidget) - self.label_5.setGeometry(QRect(430, 180, 54, 16)) - self.label_5.setObjectName("音频来源") - self.setCentralWidget(self.centralwidget) - - self.retranslateUi() - QMetaObject.connectSlotsByName(self) - - def retranslateUi(self): - self.pushButton.setText("停止") - self.pushButton_2.setText("开始") - self.pushButton_3.setText("保存目录") - self.pushButton_4.setText("Size*Size") - self.checkbox.setText("录制鼠标") - self.label_1.setText("屏幕录制器") - self.label_2.setText("选择区域:") - self.label_3.setText("帧率:") - self.label_4.setText("声道设置:") - self.label_5.setText("音频来源:") - self.label_6.setText("F7:开始/停止") - - def keyPressEvent(self, event): - """监测键盘是否按下F3,如果已开始录制则停止,否则开始录制""" - if event.key() == Qt.Key_F7: - if not self.hotkey_start: - self.start() - else: - self.stop() - - def change_combox(self, event): - sendername = self.sender().objectName() - if sendername == '声道设置': - self.channels = 2 if event == 0 else 1 - elif sendername == '音频来源': - if event == '无': - self.record_audio = False - else: - self.record_audio = True - self.device_name = event - - def get_screen_grab(self, crop_size): - # 获取屏幕截图并更新至self.label0中 - screen = ImageGrab.grab().convert('RGBA') - screen = screen.crop(box=crop_size) # box=(left, upper, right, lower) - data = screen.tobytes("raw", "RGBA") - qim = QImage(data, screen.size[0], screen.size[1], QImage.Format_RGBA8888) - pix = QPixmap.fromImage(qim).scaled(self.label0.size(), aspectRatioMode=Qt.KeepAspectRatio) - pix.detach() # QPixmap为另开线程操作的,避免程序崩溃,使用detach方法使用一个QImage对象直到QPixmap对象销毁 - self.label0.setPixmap(pix) - self.label0.repaint() - return screen.size - - def get_screen_area(self): - # 获取截图区间 - SizeScreen = MousePaint() - SizeScreen.exec_() - self.offset_x, self.offset_y = SizeScreen.lastpoint - end_x, end_y = SizeScreen.endpoint - self.screen_x, self.screen_y = self.get_screen_grab((self.offset_x, self.offset_y, end_x, end_y)) - self.screenshot.config_modify(offset_x=self.offset_x, offset_y=self.offset_y, - width=self.screen_x, height=self.screen_y) - self.pushButton_4.setText(f'{self.screen_x}*{self.screen_y}') - - def screen_fps_mofify(self, fps): - self.screenshot.config_modify(fps=fps) - - def mouse_draw(self, checked): - draw_mouse = 1 if checked else 0 - self.screenshot.config_modify(draw_mouse=draw_mouse) - - def open_dirpath(self): - fdir = QFileDialog.getExistingDirectory(self, '选择目录', self._dir) - if not fdir: - return None - self._dir = fdir - self.set_filename() - - def set_filename(self): - self.fname = f'{self._dir}/屏幕录制缓存_{int(datetime.now().replace(microsecond=0).timestamp())}' - self.screenshot.config_modify(filename=self.fname) - self.audio = AudioRecord() - self.setWindowTitle(f'屏幕录制 {self.fname}') - - def start(self): - if self.hotkey_start: - return - if not self.fname: - QMessageBox.warning(self, '请选择保存目录!', '请选择保存目录!') - return - self.screenshot.start() - if self.record_audio: - self.audio.stop_flag = False - self.audio.run(filename=self.fname + '.mp3', name=self.device_name) - self.hotkey_start = True - - def stop(self): - if not self.hotkey_start: - return - self.audio.stop_flag = True - self.hotkey_start = False - self.screenshot.stop() - if self.record_audio: - self.screenshot.compose() - else: - filename = self.fname + '.mp4' - target = filename.replace('缓存', '') - Path(filename).replace(target) - self.set_filename() - - -class MousePaint(QDialog): - """移动鼠标获取屏幕捕获范围""" - - def __init__(self): - super().__init__() - self.setMouseTracking(True) - # 设置窗口布满整个屏幕 - self.showFullScreen() - # 设置窗体无边框 - self.setWindowFlags(Qt.FramelessWindowHint) # 窗口置顶,无边框 - # 设置背景透明 - self.setWindowOpacity(0.5) - self.initUI() - self.setFocus() - - def initUI(self): - self.setGeometry(*(QDesktopWidget().screenGeometry()).getRect()) - self.pix = QPixmap() - self.lastpoint = QPoint() - self.endpoint = QPoint() - self.pos = None - self.bline = 0 - - def mousePressEvent(self, event): - # 监听鼠标按压事件 - if event.button() == Qt.LeftButton: - self.lastpoint = event.x(), event.y() - self.bline = 1 - elif event.button() == Qt.RightButton: - self.close() - event.accept() - - def mouseReleaseEvent(self, event): - # 监听鼠标释放事件 - self.endpoint = event.x(), event.y() - self.bline = 0 - event.accept() - self.close() - - def mouseMoveEvent(self, event): - # 监听鼠标移动事件 - if self.bline == 1: - self.pos = event.x(), event.y() - event.accept() - self.update() - - def paintEvent(self, event): - # 绘画事件 - if self.bline == 1: - pp = QPainter(self) - pen = QPen() # 定义笔格式对象 - pen.setWidth(5) # 设置笔的宽度 - pen.setColor(QColor(255, 0, 0)) - pp.setPen(pen) - lpx, lpy = self.lastpoint - pp.drawRect(lpx, lpy, self.pos[0] - lpx, self.pos[1] - lpy) - event.accept() - - -# def main(): -# """运行函数""" -# # 将7zip压缩格式添加到shutil中 -# shutil.register_archive_format('7zip', pack_7zarchive, description='7zip archive') -# shutil.register_unpack_format('7zip', ['.7z'], unpack_7zarchive, description='7zip archive') -# app = QApplication(sys.argv) -# app.setAttribute(Qt.AA_UseHighDpiPixmaps) -# ui = Ui_MainWindow1() -# sys.exit(app.exec_()) - - -#if __name__ == '__main__': -# main() diff --git a/Screenshot/Screenshot_record.py b/Screenshot/Screenshot_record.py deleted file mode 100644 index a19e253..0000000 --- a/Screenshot/Screenshot_record.py +++ /dev/null @@ -1,68 +0,0 @@ -""" -使用ffmpeg录制屏幕,并结合Pyaudio同步录制的音频合成带有声音的视频文件 -""" -import sys -from pathlib import Path -from time import sleep - -import ffmpeg - - -def file_path(filename): - relative_path = Path('resource').joinpath(filename) - if getattr(sys, 'frozen', False): - base_path = Path(sys._MEIPASS) - else: - base_path = Path('.').absolute() - return Path(base_path).joinpath(relative_path).as_posix() - - -class Screenshot: - - def __init__(self, width=1920, height=1080, fps=15): - self.width = width - self.height = height - self.fps = fps - self.process = None - self.ffmpeg_path = file_path('ffmpeg.exe') - - def __call__(self, width, height, fps=None): - self.width = width - self.height = height - self.fps = fps if fps else self.fps - - @staticmethod - def unlink(filename): - Path(filename).unlink() - - def record(self, filename, offset_x=0, offset_y=0, draw_mouse=0): - self.process = ( - ffmpeg.output( - ffmpeg.input( - filename='desktop', format='gdigrab', framerate=self.fps, offset_x=offset_x, offset_y=offset_y, - draw_mouse=draw_mouse, s=f'{self.width}x{self.height}'), - filename=filename, pix_fmt='yuv420p' - ).overwrite_output() - ) - self.ffmpeg_async() - - def compose_audio(self, video_path, audio_path, output_path): - self.process = ( - ffmpeg.output( - ffmpeg.input(filename=video_path), - ffmpeg.input(filename=audio_path), - filename=output_path, vcodec='copy', acodec='aac', strict='experimental', pix_fmt='yuv420p' - ).overwrite_output() - ) - sleep(1) - self.ffmpeg_async() - - def ffmpeg_async(self): - self.process = self.process.run_async(cmd=self.ffmpeg_path, pipe_stdin=True, pipe_stdout=False, - pipe_stderr=False) - - def terminate(self): - if self.process is not None: - self.process.communicate(str.encode("q")) - self.process.terminate() - self.process = None diff --git a/Screenshot/Screenshot_record_with_cv2.py b/Screenshot/Screenshot_record_with_cv2.py deleted file mode 100644 index 8f6a136..0000000 --- a/Screenshot/Screenshot_record_with_cv2.py +++ /dev/null @@ -1,151 +0,0 @@ -import time -from pathlib import Path -from threading import Thread - -import cv2 -import numpy as np -from PIL import ImageGrab -from numba import jit -from pynput import keyboard - - -@jit(nopython=True) -def average_n(x, y): - """Numpy计算趋近值""" - return ((x + y + y) // 3).astype(x.dtype) - - -class ScreenshotVideo(Thread): - - def __init__(self, width, high, path='', fps=15): - """初始化参数""" - super().__init__() - self.save_file = path - self.best_fps = fps - self.fps = fps - self.width = width - self.high = high - self.spend_time = 1 - self.flag = False - self.kill = False - self.video = None - - def __call__(self, path): - """重载视频路径,便于类的二次调用""" - self.save_file = Path(path) - self.video = self.init_videowriter(self.save_file) - - @staticmethod - def screenshot(): - """静态方法,屏幕截图,并转换为np.array数组""" - return np.array(ImageGrab.grab()) - - @staticmethod - def get_fourcc(name): - """视频编码字典""" - fourcc_maps = {'.avi': 'I420', - '.m4v': 'mp4v', - '.mp4': 'avc1', - '.ogv': 'THEO', - '.flv': 'FLV1', - } - return fourcc_maps.get(name) - - def init_videowriter(self, path): - """获取视频编码并新建视频文件""" - if not path: - raise Exception('视频路径未设置,请设置\nvideo = ScreenshotVideo(fps,width,high)\nvideo = video(video_path)') - path = Path(path) if isinstance(path, str) else path - fourcc = cv2.VideoWriter_fourcc(*self.get_fourcc(path.suffix)) - return cv2.VideoWriter(path.as_posix(), fourcc, self.fps, (self.width, self.high)) - - def video_record_doing(self, img): - """将BGR数组转换为RGB数组""" - im_cv = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) - self.video.write(im_cv) - - def video_record_end(self): - """录制结束,根据条件判断文件是否保存""" - self.video.release() - cv2.destroyAllWindows() - if self.save_file and self.kill: - Path(self.save_file).unlink() - - def video_best_fps(self, path): - """获取电脑录制视频的最优帧率""" - video = cv2.VideoCapture(path) - fps = video.get(cv2.CAP_PROP_FPS) - count = video.get(cv2.CAP_PROP_FRAME_COUNT) - self.best_fps = int(fps * ((int(count) / fps) / self.spend_time)) - video.release() - - def pre_video_record(self): - """预录制,以获取最佳fps值""" - self.video = self.init_videowriter('test.mp4') - start_time = time.time() - for _ in range(10): - im = self.screenshot() - self.video_record_doing(im) - self.spend_time = round(time.time() - start_time, 4) - self.video_record_end() - time.sleep(2) - self.video_best_fps('test.mp4') - Path('test.mp4').unlink() - - def insert_frame_array(self, frame_list): - """Numpy增强截图信息""" - fps_n = round(self.fps / self.best_fps) - if fps_n <= 0: - return frame_list - times = int(np.log2(fps_n)) # 倍率 - for _ in range(times): - frame_list2 = map(average_n, [frame_list[0]] + frame_list[:-1], frame_list) - frame_list = [[x, y] for x, y in zip(frame_list2, frame_list)] - frame_list = [j for i in frame_list for j in i] - return frame_list - - def frame2video_run(self): - """使用opencv将连续型截图转换为视频""" - self.video = self.init_videowriter(self.save_file) - start_time = time.time() - frame_list = [] - while True: - frame_list.append(self.screenshot()) - if self.flag: - break - self.spend_time = round(time.time() - start_time, 4) - if not self.kill: # 视频录制不被终止将逐帧处理图像 - frame_list = self.insert_frame_array(frame_list) - for im in frame_list: - self.video_record_doing(im) - self.video_record_end() - - def hotkey(self): - """热键监听""" - with keyboard.Listener(on_press=self.on_press) as listener: - listener.join() - - def on_press(self, key): - try: - if key.char == 't': # 录屏结束,保存视频 - self.flag = True - elif key.char == 'k': # 录屏中止,删除文件 - self.flag = True - self.kill = True - except Exception as e: - print(e) - - def run(self): - # 运行函数 - # 设置守护线程 - Thread(target=self.hotkey, daemon=True).start() - # 运行截图函数 - self.frame2video_run() - - -screen = ImageGrab.grab() -width, high = screen.size -video = ScreenshotVideo(width, high, fps=60) -video.pre_video_record() # 预录制获取最优fps -video('test1.mp4') -video.run() diff --git a/Screenshot/Screenshot_test.py b/Screenshot/Screenshot_test.py deleted file mode 100644 index 0f8276f..0000000 --- a/Screenshot/Screenshot_test.py +++ /dev/null @@ -1,32 +0,0 @@ -from threading import Thread - -from pynput import keyboard # pip install pynput - -from Audio_record import AudioRecord -from Screenshot_record import Screenshot - - -def hotkey(): - """热键监听""" - with keyboard.Listener(on_press=on_press) as listener: - listener.join() - - -def on_press(key): - try: - video.terminate() - if key.char == 't': # t键,录制结束,保存音视频 - audio.stop_flag = True - elif key.char == 'k': # k键,录制中止,删除文件 - audio.stop_flag = True - audio.kill = True - video.unlink('test.mp4') - except Exception as e: - print(e) - - -key_thread = Thread(target=hotkey, daemon=True) -audio = AudioRecord() -video = Screenshot() -key_thread.start() -video.record('test.mp4') diff --git a/Screenshot/__pycache__/Audio_record.cpython-39.pyc b/Screenshot/__pycache__/Audio_record.cpython-39.pyc deleted file mode 100644 index b172c7d..0000000 Binary files a/Screenshot/__pycache__/Audio_record.cpython-39.pyc and /dev/null differ diff --git a/Screenshot/__pycache__/Screenshot_Gui.cpython-39.pyc b/Screenshot/__pycache__/Screenshot_Gui.cpython-39.pyc deleted file mode 100644 index 1e3bedb..0000000 Binary files a/Screenshot/__pycache__/Screenshot_Gui.cpython-39.pyc and /dev/null differ diff --git a/Screenshot/__pycache__/Screenshot_record.cpython-39.pyc b/Screenshot/__pycache__/Screenshot_record.cpython-39.pyc deleted file mode 100644 index 826f23e..0000000 Binary files a/Screenshot/__pycache__/Screenshot_record.cpython-39.pyc and /dev/null differ diff --git a/Screenshot/requirements.txt b/Screenshot/requirements.txt deleted file mode 100644 index e36e104..0000000 --- a/Screenshot/requirements.txt +++ /dev/null @@ -1,9 +0,0 @@ -ffmpeg-python==0.2.0 -numba==0.54.1 -numpy==1.20.3 -opencv-python==4.5.4.60 -Pillow==8.4.0 -PyAudio -pynput==1.7.5 -PyQt5==5.15.4 -py7zr==0.18.4 diff --git a/Screenshot/resource/ffmpeg.7z b/Screenshot/resource/ffmpeg.7z deleted file mode 100644 index 80bad7c..0000000 Binary files a/Screenshot/resource/ffmpeg.7z and /dev/null differ diff --git a/Screenshot/resource/ffmpeg.exe b/Screenshot/resource/ffmpeg.exe deleted file mode 100644 index 71b5352..0000000 Binary files a/Screenshot/resource/ffmpeg.exe and /dev/null differ diff --git a/Screenshot/resource/gui_ico.ico b/Screenshot/resource/gui_ico.ico deleted file mode 100644 index 4a5fb69..0000000 Binary files a/Screenshot/resource/gui_ico.ico and /dev/null differ diff --git a/Screenshot/resource/gui_svg.svg b/Screenshot/resource/gui_svg.svg deleted file mode 100644 index 37d2ebc..0000000 --- a/Screenshot/resource/gui_svg.svg +++ /dev/null @@ -1,4 +0,0 @@ - - \ No newline at end of file diff --git a/page1.py b/page1.py deleted file mode 100644 index 22467ff..0000000 --- a/page1.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'page1.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets - - -class Ui_Form1(object): - def setupUi(self, Form): - Form.setObjectName("Form") - Form.resize(1108, 767) - self.pushButton = QtWidgets.QPushButton(Form) - self.pushButton.setGeometry(QtCore.QRect(10, 740, 75, 23)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth()) - self.pushButton.setSizePolicy(sizePolicy) - self.pushButton.setObjectName("pushButton") - self.pushButton_2 = QtWidgets.QPushButton(Form) - self.pushButton_2.setGeometry(QtCore.QRect(90, 740, 75, 23)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.pushButton_2.sizePolicy().hasHeightForWidth()) - self.pushButton_2.setSizePolicy(sizePolicy) - self.pushButton_2.setObjectName("pushButton_2") - self.radioButton = QtWidgets.QRadioButton(Form) - self.radioButton.setGeometry(QtCore.QRect(10, 40, 59, 16)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.radioButton.sizePolicy().hasHeightForWidth()) - self.radioButton.setSizePolicy(sizePolicy) - self.radioButton.setMaximumSize(QtCore.QSize(100, 20)) - self.radioButton.setObjectName("radioButton") - self.mdiArea = QtWidgets.QMdiArea(Form) - self.mdiArea.setGeometry(QtCore.QRect(9, 61, 1091, 671)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.mdiArea.sizePolicy().hasHeightForWidth()) - self.mdiArea.setSizePolicy(sizePolicy) - self.mdiArea.setMaximumSize(QtCore.QSize(16777215, 16777215)) - self.mdiArea.setObjectName("mdiArea") - self.pushButton_4 = QtWidgets.QPushButton(Form) - self.pushButton_4.setGeometry(QtCore.QRect(1020, 740, 75, 23)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.pushButton_4.sizePolicy().hasHeightForWidth()) - self.pushButton_4.setSizePolicy(sizePolicy) - self.pushButton_4.setObjectName("pushButton_4") - self.pushButton_3 = QtWidgets.QPushButton(Form) - self.pushButton_3.setGeometry(QtCore.QRect(940, 740, 75, 23)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.pushButton_3.sizePolicy().hasHeightForWidth()) - self.pushButton_3.setSizePolicy(sizePolicy) - self.pushButton_3.setObjectName("pushButton_3") - self.label = QtWidgets.QLabel(Form) - self.label.setGeometry(QtCore.QRect(10, 10, 101, 31)) - self.label.setObjectName("label") - - self.retranslateUi(Form) - QtCore.QMetaObject.connectSlotsByName(Form) - - def retranslateUi(self, Form): - _translate = QtCore.QCoreApplication.translate - Form.setWindowTitle(_translate("Form", "page1")) - self.pushButton.setText(_translate("Form", "连接")) - self.pushButton_2.setText(_translate("Form", "断开")) - self.radioButton.setText(_translate("Form", "无连接")) - self.pushButton_4.setText(_translate("Form", "缩小")) - self.pushButton_3.setText(_translate("Form", "放大")) - self.label.setText(_translate("Form", "实时画面显示系统")) diff --git a/page2.py b/page2.py deleted file mode 100644 index 37b30c9..0000000 --- a/page2.py +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'page2.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets -from vedio_demo import Ui_MainWindow -from PyQt5.QtWidgets import * -from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer - -class Ui_MainWindow1(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(1112, 766) - self.centralwidget = QtWidgets.QWidget(MainWindow) - self.centralwidget.setObjectName("centralwidget") - self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) - self.gridLayout.setObjectName("gridLayout") - self.pushButton = QtWidgets.QPushButton(self.centralwidget) - self.pushButton.setObjectName("pushButton") - self.gridLayout.addWidget(self.pushButton, 2, 0, 1, 1) - self.mdiArea = QtWidgets.QMdiArea(self.centralwidget) - self.mdiArea.setObjectName("mdiArea") - self.gridLayout.addWidget(self.mdiArea, 1, 0, 1, 1) - self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) - self.pushButton_2.setObjectName("pushButton_2") - self.gridLayout.addWidget(self.pushButton_2, 3, 0, 1, 1) - self.label = QtWidgets.QLabel(self.centralwidget) - self.label.setObjectName("label") - self.gridLayout.addWidget(self.label, 0, 0, 1, 1) - MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 23)) - self.menubar.setObjectName("menubar") - MainWindow.setMenuBar(self.menubar) - self.statusbar = QtWidgets.QStatusBar(MainWindow) - self.statusbar.setObjectName("statusbar") - MainWindow.setStatusBar(self.statusbar) - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - self.pushButton.clicked.connect(lambda: self.msg()) - def msg(self): - MainWindow = QMainWindow() - ui = Ui_MainWindow() - ui.setupUi(MainWindow) - self.mdiArea.addSubWindow(MainWindow) - MainWindow.showMaximized() - ui.player = QMediaPlayer() - ui.player.setVideoOutput(ui.wgt_video) - ui.pushButton.clicked.connect(lambda: openVideoFile(ui)) - ui.player.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0])) - ui.pushButton_2.clicked.connect(lambda: pause(ui)) - def pause(a): - a.player.pause() - def openVideoFile(a): - a.player.play() - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.pushButton.setText(_translate("MainWindow", "添加文件")) - self.pushButton_2.setText(_translate("MainWindow", "分析路径")) - self.label.setText(_translate("MainWindow", "路径分析界面")) diff --git a/page2_2.py b/page2_2.py deleted file mode 100644 index 3bd6ba5..0000000 --- a/page2_2.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'page2.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets -from vedio_demo import Ui_MainWindow -from PyQt5.QtWidgets import * -from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer -from Search_2D.Astar import AStar -import os -import sys -sys.path.append(os.path.dirname(os.path.abspath(__file__)) + - "/../../Search_based_Planning/") -from Search_2D import plotting - -class Ui_MainWindow1(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(1112, 766) - self.centralwidget = QtWidgets.QWidget(MainWindow) - self.centralwidget.setObjectName("centralwidget") - self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) - self.gridLayout.setObjectName("gridLayout") - self.pushButton = QtWidgets.QPushButton(self.centralwidget) - self.pushButton.setObjectName("pushButton") - self.gridLayout.addWidget(self.pushButton, 2, 0, 1, 1) - self.mdiArea = QtWidgets.QMdiArea(self.centralwidget) - self.mdiArea.setObjectName("mdiArea") - self.gridLayout.addWidget(self.mdiArea, 1, 0, 1, 1) - self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) - self.pushButton_2.setObjectName("pushButton_2") - self.gridLayout.addWidget(self.pushButton_2, 3, 0, 1, 1) - self.label = QtWidgets.QLabel(self.centralwidget) - self.label.setObjectName("label") - self.gridLayout.addWidget(self.label, 0, 0, 1, 1) - MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 23)) - self.menubar.setObjectName("menubar") - MainWindow.setMenuBar(self.menubar) - self.statusbar = QtWidgets.QStatusBar(MainWindow) - self.statusbar.setObjectName("statusbar") - MainWindow.setStatusBar(self.statusbar) - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - self.pushButton.clicked.connect(lambda: self.msg()) - self.pushButton_2.clicked.connect(lambda: self.search()) - def msg(self): - MainWindow = QMainWindow() - ui = Ui_MainWindow() - ui.setupUi(MainWindow) - self.mdiArea.addSubWindow(MainWindow) - MainWindow.showMaximized() - ui.player = QMediaPlayer() - ui.player.setVideoOutput(ui.wgt_video) - ui.pushButton.clicked.connect(lambda: openVideoFile(ui)) - ui.player.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0])) - ui.pushButton_2.clicked.connect(lambda: pause(ui)) - def pause(a): - a.player.pause() - def openVideoFile(a): - a.player.play() - def search(self): - s_start = (5, 5) - s_goal = (45, 25) - astar = AStar(s_start, s_goal, "euclidean") - plot = plotting.Plotting(s_start, s_goal) - path, visited = astar.searching() - plot.animation(path, visited, "A*") - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.pushButton.setText(_translate("MainWindow", "添加文件")) - self.pushButton_2.setText(_translate("MainWindow", "分析路径")) - self.label.setText(_translate("MainWindow", "路径分析界面")) diff --git a/src/page0.py b/src/page0.py deleted file mode 100644 index aef16d6..0000000 --- a/src/page0.py +++ /dev/null @@ -1,65 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'page2.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtWidgets -from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer -from PyQt5.QtWidgets import * - -from vedio_demo import Ui_MainWindow - - -class Ui_MainWindow1(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(1112, 766) - self.centralwidget = QtWidgets.QWidget(MainWindow) - self.centralwidget.setObjectName("centralwidget") - self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) - self.gridLayout.setObjectName("gridLayout") - self.pushButton = QtWidgets.QPushButton(self.centralwidget) - self.pushButton.setObjectName("pushButton") - self.gridLayout.addWidget(self.pushButton, 1, 0, 1, 1) - self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) - self.pushButton_2.setObjectName("pushButton_2") - self.gridLayout.addWidget(self.pushButton_2, 2, 0, 1, 1) - self.mdiArea = QtWidgets.QMdiArea(self.centralwidget) - self.mdiArea.setObjectName("mdiArea") - self.gridLayout.addWidget(self.mdiArea, 0, 0, 1, 1) - MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 23)) - self.menubar.setObjectName("menubar") - MainWindow.setMenuBar(self.menubar) - self.statusbar = QtWidgets.QStatusBar(MainWindow) - self.statusbar.setObjectName("statusbar") - MainWindow.setStatusBar(self.statusbar) - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - self.pushButton.clicked.connect(lambda: self.msg()) - def msg(self): - MainWindow = QMainWindow() - ui = Ui_MainWindow() - ui.setupUi(MainWindow) - self.mdiArea.addSubWindow(MainWindow) - MainWindow.showMaximized() - ui.player = QMediaPlayer() - ui.player.setVideoOutput(ui.wgt_video) - ui.pushButton.clicked.connect(lambda: openVideoFile(ui)) - ui.player.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0])) - ui.pushButton_2.clicked.connect(lambda: pause(ui)) - def pause(a): - a.player.pause() - def openVideoFile(a): - a.player.play() - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.pushButton.setText(_translate("MainWindow", "添加文件")) - self.pushButton_2.setText(_translate("MainWindow", "分析路径")) diff --git a/src/page1.py b/src/page1.py deleted file mode 100644 index 250c935..0000000 --- a/src/page1.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'page1.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets - - -class Ui_Form1(object): - def setupUi(self, Form): - Form.setObjectName("Form") - Form.resize(1108, 767) - self.pushButton = QtWidgets.QPushButton(Form) - self.pushButton.setGeometry(QtCore.QRect(10, 740, 75, 23)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth()) - self.pushButton.setSizePolicy(sizePolicy) - self.pushButton.setObjectName("pushButton") - self.pushButton_2 = QtWidgets.QPushButton(Form) - self.pushButton_2.setGeometry(QtCore.QRect(90, 740, 75, 23)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.pushButton_2.sizePolicy().hasHeightForWidth()) - self.pushButton_2.setSizePolicy(sizePolicy) - self.pushButton_2.setObjectName("pushButton_2") - self.radioButton = QtWidgets.QRadioButton(Form) - self.radioButton.setGeometry(QtCore.QRect(10, 40, 59, 16)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.radioButton.sizePolicy().hasHeightForWidth()) - self.radioButton.setSizePolicy(sizePolicy) - self.radioButton.setMaximumSize(QtCore.QSize(100, 20)) - self.radioButton.setObjectName("radioButton") - self.mdiArea = QtWidgets.QMdiArea(Form) - self.mdiArea.setGeometry(QtCore.QRect(9, 61, 1091, 671)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.mdiArea.sizePolicy().hasHeightForWidth()) - self.mdiArea.setSizePolicy(sizePolicy) - self.mdiArea.setMaximumSize(QtCore.QSize(16777215, 16777215)) - self.mdiArea.setObjectName("mdiArea") - self.pushButton_4 = QtWidgets.QPushButton(Form) - self.pushButton_4.setGeometry(QtCore.QRect(1020, 740, 75, 23)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.pushButton_4.sizePolicy().hasHeightForWidth()) - self.pushButton_4.setSizePolicy(sizePolicy) - self.pushButton_4.setObjectName("pushButton_4") - self.pushButton_3 = QtWidgets.QPushButton(Form) - self.pushButton_3.setGeometry(QtCore.QRect(940, 740, 75, 23)) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.pushButton_3.sizePolicy().hasHeightForWidth()) - self.pushButton_3.setSizePolicy(sizePolicy) - self.pushButton_3.setObjectName("pushButton_3") - self.label = QtWidgets.QLabel(Form) - self.label.setGeometry(QtCore.QRect(10, 10, 101, 31)) - self.label.setObjectName("label") - - self.retranslateUi(Form) - QtCore.QMetaObject.connectSlotsByName(Form) - - def retranslateUi(self, Form): - _translate = QtCore.QCoreApplication.translate - Form.setWindowTitle(_translate("Form", "page1")) - self.pushButton.setText(_translate("Form", "连接")) - self.pushButton_2.setText(_translate("Form", "断开")) - self.radioButton.setText(_translate("Form", "无连接")) - self.pushButton_4.setText(_translate("Form", "缩小")) - self.pushButton_3.setText(_translate("Form", "放大")) - self.label.setText(_translate("Form", "实时画面显示系统")) diff --git a/src/page2.py b/src/page2.py deleted file mode 100644 index f1d5e10..0000000 --- a/src/page2.py +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'page2.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets -from vedio_demo import Ui_MainWindow -from PyQt5.QtWidgets import * -from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer - -class Ui_MainWindow1(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(1112, 766) - self.centralwidget = QtWidgets.QWidget(MainWindow) - self.centralwidget.setObjectName("centralwidget") - self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) - self.gridLayout.setObjectName("gridLayout") - self.pushButton = QtWidgets.QPushButton(self.centralwidget) - self.pushButton.setObjectName("pushButton") - self.gridLayout.addWidget(self.pushButton, 2, 0, 1, 1) - self.mdiArea = QtWidgets.QMdiArea(self.centralwidget) - self.mdiArea.setObjectName("mdiArea") - self.gridLayout.addWidget(self.mdiArea, 1, 0, 1, 1) - self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) - self.pushButton_2.setObjectName("pushButton_2") - self.gridLayout.addWidget(self.pushButton_2, 3, 0, 1, 1) - self.label = QtWidgets.QLabel(self.centralwidget) - self.label.setObjectName("label") - self.gridLayout.addWidget(self.label, 0, 0, 1, 1) - MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 23)) - self.menubar.setObjectName("menubar") - MainWindow.setMenuBar(self.menubar) - self.statusbar = QtWidgets.QStatusBar(MainWindow) - self.statusbar.setObjectName("statusbar") - MainWindow.setStatusBar(self.statusbar) - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - self.pushButton.clicked.connect(lambda: self.msg()) - def msg(self): - MainWindow = QMainWindow() - ui = Ui_MainWindow() - ui.setupUi(MainWindow) - self.mdiArea.addSubWindow(MainWindow) - MainWindow.showMaximized() - ui.player = QMediaPlayer() - ui.player.setVideoOutput(ui.wgt_video) - ui.pushButton.clicked.connect(lambda: openVideoFile(ui)) - ui.player.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0])) - ui.pushButton_2.clicked.connect(lambda: pause(ui)) - def pause(a): - a.player.pause() - def openVideoFile(a): - a.player.play() - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.pushButton.setText(_translate("MainWindow", "添加文件")) - self.pushButton_2.setText(_translate("MainWindow", "分析路径")) - self.label.setText(_translate("MainWindow", "路径分析界面")) diff --git a/src/page2_2.py b/src/page2_2.py deleted file mode 100644 index 30b0dfb..0000000 --- a/src/page2_2.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'page2.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets -from vedio_demo import Ui_MainWindow -from PyQt5.QtWidgets import * -from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer -from Search_2D.Astar import AStar -import os -import sys -sys.path.append(os.path.dirname(os.path.abspath(__file__)) + - "/../../Search_based_Planning/") -from Search_2D import plotting - -class Ui_MainWindow1(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(1112, 766) - self.centralwidget = QtWidgets.QWidget(MainWindow) - self.centralwidget.setObjectName("centralwidget") - self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) - self.gridLayout.setObjectName("gridLayout") - self.pushButton = QtWidgets.QPushButton(self.centralwidget) - self.pushButton.setObjectName("pushButton") - self.gridLayout.addWidget(self.pushButton, 2, 0, 1, 1) - self.mdiArea = QtWidgets.QMdiArea(self.centralwidget) - self.mdiArea.setObjectName("mdiArea") - self.gridLayout.addWidget(self.mdiArea, 1, 0, 1, 1) - self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) - self.pushButton_2.setObjectName("pushButton_2") - self.gridLayout.addWidget(self.pushButton_2, 3, 0, 1, 1) - self.label = QtWidgets.QLabel(self.centralwidget) - self.label.setObjectName("label") - self.gridLayout.addWidget(self.label, 0, 0, 1, 1) - MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 23)) - self.menubar.setObjectName("menubar") - MainWindow.setMenuBar(self.menubar) - self.statusbar = QtWidgets.QStatusBar(MainWindow) - self.statusbar.setObjectName("statusbar") - MainWindow.setStatusBar(self.statusbar) - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - self.pushButton.clicked.connect(lambda: self.msg()) - self.pushButton_2.clicked.connect(lambda: self.search()) - def msg(self): - MainWindow = QMainWindow() - ui = Ui_MainWindow() - ui.setupUi(MainWindow) - self.mdiArea.addSubWindow(MainWindow) - MainWindow.showMaximized() - ui.player = QMediaPlayer() - ui.player.setVideoOutput(ui.wgt_video) - ui.pushButton.clicked.connect(lambda: openVideoFile(ui)) - ui.player.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0])) - ui.pushButton_2.clicked.connect(lambda: pause(ui)) - def pause(a): - a.player.pause() - def openVideoFile(a): - a.player.play() - def search(self): - s_start = (5, 5) - s_goal = (45, 25) - astar = AStar(s_start, s_goal, "euclidean") - plot = plotting.Plotting(s_start, s_goal) - path, visited = astar.searching() - plot.animation(path, visited, "A*") - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.pushButton.setText(_translate("MainWindow", "添加文件")) - self.pushButton_2.setText(_translate("MainWindow", "分析路径")) - self.label.setText(_translate("MainWindow", "路径分析界面")) diff --git a/src/system_main.py b/src/system_main.py deleted file mode 100644 index 2a3fcc8..0000000 --- a/src/system_main.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'system_main.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets -import sys -from PyQt5.QtWidgets import * -from page1 import Ui_Form1 -from page2 import Ui_MainWindow1 - - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(1275, 896) - self.centralwidget = QtWidgets.QWidget(MainWindow) - self.centralwidget.setObjectName("centralwidget") - self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) - self.gridLayout.setObjectName("gridLayout") - self.label = QtWidgets.QLabel(self.centralwidget) - self.label.setMinimumSize(QtCore.QSize(0, 20)) - self.label.setMaximumSize(QtCore.QSize(200, 20)) - self.label.setTextFormat(QtCore.Qt.AutoText) - self.label.setAlignment(QtCore.Qt.AlignCenter) - self.label.setObjectName("label") - self.gridLayout.addWidget(self.label, 1, 0, 1, 1) - self.groupBox = QtWidgets.QGroupBox(self.centralwidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) - self.groupBox.setSizePolicy(sizePolicy) - self.groupBox.setMaximumSize(QtCore.QSize(600, 16777215)) - self.groupBox.setFlat(False) - self.groupBox.setCheckable(False) - self.groupBox.setObjectName("groupBox") - self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox) - self.gridLayout_2.setObjectName("gridLayout_2") - self.pushButton = QtWidgets.QPushButton(self.groupBox) - self.pushButton.setObjectName("pushButton") - self.gridLayout_2.addWidget(self.pushButton, 0, 0, 1, 1) - self.pushButton_2 = QtWidgets.QPushButton(self.groupBox) - self.pushButton_2.setObjectName("pushButton_2") - self.gridLayout_2.addWidget(self.pushButton_2, 1, 0, 1, 1) - self.gridLayout.addWidget(self.groupBox, 2, 0, 2, 1) - self.mdiArea = QtWidgets.QMdiArea(self.centralwidget) - self.mdiArea.setObjectName("mdiArea") - self.gridLayout.addWidget(self.mdiArea, 2, 1, 2, 1) - MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1275, 23)) - self.menubar.setObjectName("menubar") - MainWindow.setMenuBar(self.menubar) - self.statusbar = QtWidgets.QStatusBar(MainWindow) - self.statusbar.setObjectName("statusbar") - MainWindow.setStatusBar(self.statusbar) - self.pushButton.clicked.connect(lambda: self.open1()) - self.pushButton_2.clicked.connect(lambda: self.open2()) - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - - def open1(self): - MainWindow = QMainWindow() - ui = Ui_Form1() - ui.setupUi(MainWindow) - self.mdiArea.addSubWindow(MainWindow) - MainWindow.showMaximized() - - def open2(self): - MainWindow = QMainWindow() - ui = Ui_MainWindow1() - ui.setupUi(MainWindow) - self.mdiArea.addSubWindow(MainWindow) - MainWindow.showMaximized() - - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "无人机自动寻路系统")) - self.label.setText(_translate("MainWindow", "无人机自动寻路系统(主界面)")) - self.groupBox.setTitle(_translate("MainWindow", "菜单栏")) - self.pushButton.setText(_translate("MainWindow", "实时画面")) - self.pushButton_2.setText(_translate("MainWindow", "路径分析")) - -if __name__ == '__main__': - app = QApplication(sys.argv) - MainWindow = QMainWindow() - ui = Ui_MainWindow() - ui.setupUi(MainWindow) - MainWindow.show() - sys.exit(app.exec_()) \ No newline at end of file diff --git a/src/tello_UI.py b/src/tello_UI.py deleted file mode 100644 index ec1890a..0000000 --- a/src/tello_UI.py +++ /dev/null @@ -1,97 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'tello_UI.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets - - -class Ui_Form(object): - def setupUi(self, Form): - Form.setObjectName("Form") - Form.resize(1022, 618) - self.groupBox_4 = QtWidgets.QGroupBox(Form) - self.groupBox_4.setGeometry(QtCore.QRect(670, 567, 350, 50)) - self.groupBox_4.setMaximumSize(QtCore.QSize(350, 50)) - self.groupBox_4.setObjectName("groupBox_4") - self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox_4) - self.lineEdit_3.setGeometry(QtCore.QRect(10, 20, 331, 20)) - self.lineEdit_3.setObjectName("lineEdit_3") - self.groupBox_2 = QtWidgets.QGroupBox(Form) - self.groupBox_2.setGeometry(QtCore.QRect(670, 156, 350, 405)) - self.groupBox_2.setObjectName("groupBox_2") - self.pushButton = QtWidgets.QPushButton(self.groupBox_2) - self.pushButton.setGeometry(QtCore.QRect(150, 120, 71, 71)) - self.pushButton.setText("") - icon = QtGui.QIcon() - icon.addPixmap(QtGui.QPixmap("tello_png/up.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.pushButton.setIcon(icon) - self.pushButton.setIconSize(QtCore.QSize(70, 100)) - self.pushButton.setObjectName("pushButton") - self.pushButton_2 = QtWidgets.QPushButton(self.groupBox_2) - self.pushButton_2.setGeometry(QtCore.QRect(70, 200, 71, 71)) - self.pushButton_2.setText("") - icon1 = QtGui.QIcon() - icon1.addPixmap(QtGui.QPixmap("tello_png/left.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.pushButton_2.setIcon(icon1) - self.pushButton_2.setIconSize(QtCore.QSize(70, 100)) - self.pushButton_2.setObjectName("pushButton_2") - self.pushButton_4 = QtWidgets.QPushButton(self.groupBox_2) - self.pushButton_4.setGeometry(QtCore.QRect(230, 200, 71, 71)) - self.pushButton_4.setText("") - icon2 = QtGui.QIcon() - icon2.addPixmap(QtGui.QPixmap("tello_png/right.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.pushButton_4.setIcon(icon2) - self.pushButton_4.setIconSize(QtCore.QSize(70, 100)) - self.pushButton_4.setObjectName("pushButton_4") - self.pushButton_5 = QtWidgets.QPushButton(self.groupBox_2) - self.pushButton_5.setGeometry(QtCore.QRect(150, 200, 71, 71)) - self.pushButton_5.setText("") - icon3 = QtGui.QIcon() - icon3.addPixmap(QtGui.QPixmap("tello_png/return.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.pushButton_5.setIcon(icon3) - self.pushButton_5.setIconSize(QtCore.QSize(70, 100)) - self.pushButton_5.setObjectName("pushButton_5") - self.pushButton_3 = QtWidgets.QPushButton(self.groupBox_2) - self.pushButton_3.setGeometry(QtCore.QRect(70, 20, 231, 91)) - icon4 = QtGui.QIcon() - icon4.addPixmap(QtGui.QPixmap("tello_png/qifei.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.pushButton_3.setIcon(icon4) - self.pushButton_3.setIconSize(QtCore.QSize(150, 150)) - self.pushButton_3.setObjectName("pushButton_3") - self.pushButton_6 = QtWidgets.QPushButton(self.groupBox_2) - self.pushButton_6.setGeometry(QtCore.QRect(70, 290, 231, 91)) - icon5 = QtGui.QIcon() - icon5.addPixmap(QtGui.QPixmap("tello_png/jiangluo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.pushButton_6.setIcon(icon5) - self.pushButton_6.setIconSize(QtCore.QSize(150, 150)) - self.pushButton_6.setObjectName("pushButton_6") - self.groupBox = QtWidgets.QGroupBox(Form) - self.groupBox.setGeometry(QtCore.QRect(670, 0, 350, 150)) - self.groupBox.setMaximumSize(QtCore.QSize(16777215, 150)) - self.groupBox.setObjectName("groupBox") - self.lineEdit = QtWidgets.QLineEdit(self.groupBox) - self.lineEdit.setGeometry(QtCore.QRect(20, 20, 311, 41)) - self.lineEdit.setObjectName("lineEdit") - self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox) - self.lineEdit_2.setGeometry(QtCore.QRect(20, 70, 311, 41)) - self.lineEdit_2.setObjectName("lineEdit_2") - - self.retranslateUi(Form) - QtCore.QMetaObject.connectSlotsByName(Form) - - def retranslateUi(self, Form): - _translate = QtCore.QCoreApplication.translate - Form.setWindowTitle(_translate("Form", "Form")) - self.groupBox_4.setTitle(_translate("Form", "连接状态")) - self.groupBox_2.setTitle(_translate("Form", "控制面板")) - self.pushButton_3.setText(_translate("Form", "起飞")) - self.pushButton_6.setText(_translate("Form", "降落")) - self.groupBox.setTitle(_translate("Form", "无人机状态")) - self.lineEdit.setText(_translate("Form", "剩余电量:")) - self.lineEdit_2.setText(_translate("Form", "WIFI强度:")) diff --git a/src/vedio_demo.py b/src/vedio_demo.py deleted file mode 100644 index 5a6b7f0..0000000 --- a/src/vedio_demo.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'vedio_demo.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets -from PyQt5.QtMultimediaWidgets import QVideoWidget - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(1111, 676) - self.centralwidget = QtWidgets.QWidget(MainWindow) - self.centralwidget.setObjectName("centralwidget") - self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) - self.gridLayout.setObjectName("gridLayout") - self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) - self.pushButton_2.setObjectName("pushButton_2") - self.gridLayout.addWidget(self.pushButton_2, 3, 0, 1, 1) - self.pushButton = QtWidgets.QPushButton(self.centralwidget) - self.pushButton.setObjectName("pushButton") - self.gridLayout.addWidget(self.pushButton, 2, 0, 1, 1) - self.wgt_video = QVideoWidget(self.centralwidget) - self.wgt_video.setObjectName("widget") - self.gridLayout.addWidget(self.wgt_video, 0, 0, 1, 1) - self.horizontalSlider = QtWidgets.QSlider(self.centralwidget) - self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal) - self.horizontalSlider.setObjectName("horizontalSlider") - self.gridLayout.addWidget(self.horizontalSlider, 1, 0, 1, 1) - MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1111, 23)) - self.menubar.setObjectName("menubar") - MainWindow.setMenuBar(self.menubar) - self.statusbar = QtWidgets.QStatusBar(MainWindow) - self.statusbar.setObjectName("statusbar") - MainWindow.setStatusBar(self.statusbar) - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.pushButton_2.setText(_translate("MainWindow", "暂停")) - self.pushButton.setText(_translate("MainWindow", "播放")) diff --git a/system_main.py b/system_main.py deleted file mode 100644 index a13a530..0000000 --- a/system_main.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'system_main.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets -import sys -from PyQt5.QtWidgets import * -from page1 import Ui_Form1 -from page2 import Ui_MainWindow1 - - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(1275, 896) - self.centralwidget = QtWidgets.QWidget(MainWindow) - self.centralwidget.setObjectName("centralwidget") - self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) - self.gridLayout.setObjectName("gridLayout") - self.label = QtWidgets.QLabel(self.centralwidget) - self.label.setMinimumSize(QtCore.QSize(0, 20)) - self.label.setMaximumSize(QtCore.QSize(200, 20)) - self.label.setTextFormat(QtCore.Qt.AutoText) - self.label.setAlignment(QtCore.Qt.AlignCenter) - self.label.setObjectName("label") - self.gridLayout.addWidget(self.label, 1, 0, 1, 1) - self.groupBox = QtWidgets.QGroupBox(self.centralwidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth()) - self.groupBox.setSizePolicy(sizePolicy) - self.groupBox.setMaximumSize(QtCore.QSize(600, 16777215)) - self.groupBox.setFlat(False) - self.groupBox.setCheckable(False) - self.groupBox.setObjectName("groupBox") - self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox) - self.gridLayout_2.setObjectName("gridLayout_2") - self.pushButton = QtWidgets.QPushButton(self.groupBox) - self.pushButton.setObjectName("pushButton") - self.gridLayout_2.addWidget(self.pushButton, 0, 0, 1, 1) - self.pushButton_2 = QtWidgets.QPushButton(self.groupBox) - self.pushButton_2.setObjectName("pushButton_2") - self.gridLayout_2.addWidget(self.pushButton_2, 1, 0, 1, 1) - self.gridLayout.addWidget(self.groupBox, 2, 0, 2, 1) - self.mdiArea = QtWidgets.QMdiArea(self.centralwidget) - self.mdiArea.setObjectName("mdiArea") - self.gridLayout.addWidget(self.mdiArea, 2, 1, 2, 1) - MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1275, 23)) - self.menubar.setObjectName("menubar") - MainWindow.setMenuBar(self.menubar) - self.statusbar = QtWidgets.QStatusBar(MainWindow) - self.statusbar.setObjectName("statusbar") - MainWindow.setStatusBar(self.statusbar) - self.pushButton.clicked.connect(lambda: self.open1()) - self.pushButton_2.clicked.connect(lambda: self.open2()) - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - - def open1(self): - MainWindow = QMainWindow() - ui = Ui_Form1() - ui.setupUi(MainWindow) - self.mdiArea.addSubWindow(MainWindow) - MainWindow.showMaximized() - - def open2(self): - MainWindow = QMainWindow() - ui = Ui_MainWindow1() - ui.setupUi(MainWindow) - self.mdiArea.addSubWindow(MainWindow) - MainWindow.showMaximized() - - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "无人机自动寻路系统")) - self.label.setText(_translate("MainWindow", "无人机自动寻路系统(主界面)")) - self.groupBox.setTitle(_translate("MainWindow", "菜单栏")) - self.pushButton.setText(_translate("MainWindow", "实时画面")) - self.pushButton_2.setText(_translate("MainWindow", "路径分析")) - -if __name__ == '__main__': - app = QApplication(sys.argv) - MainWindow = QMainWindow() - ui = Ui_MainWindow() - ui.setupUi(MainWindow) - MainWindow.show() - sys.exit(app.exec_()) \ No newline at end of file diff --git a/vedio_demo.py b/vedio_demo.py deleted file mode 100644 index 63b5769..0000000 --- a/vedio_demo.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'vedio_demo.ui' -# -# Created by: PyQt5 UI code generator 5.15.4 -# -# WARNING: Any manual changes made to this file will be lost when pyuic5 is -# run again. Do not edit this file unless you know what you are doing. - - -from PyQt5 import QtCore, QtGui, QtWidgets -from PyQt5.QtMultimediaWidgets import QVideoWidget - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(1111, 676) - self.centralwidget = QtWidgets.QWidget(MainWindow) - self.centralwidget.setObjectName("centralwidget") - self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) - self.gridLayout.setObjectName("gridLayout") - self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) - self.pushButton_2.setObjectName("pushButton_2") - self.gridLayout.addWidget(self.pushButton_2, 3, 0, 1, 1) - self.pushButton = QtWidgets.QPushButton(self.centralwidget) - self.pushButton.setObjectName("pushButton") - self.gridLayout.addWidget(self.pushButton, 2, 0, 1, 1) - self.wgt_video = QVideoWidget(self.centralwidget) - self.wgt_video.setObjectName("widget") - self.gridLayout.addWidget(self.wgt_video, 0, 0, 1, 1) - self.horizontalSlider = QtWidgets.QSlider(self.centralwidget) - self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal) - self.horizontalSlider.setObjectName("horizontalSlider") - self.gridLayout.addWidget(self.horizontalSlider, 1, 0, 1, 1) - MainWindow.setCentralWidget(self.centralwidget) - self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1111, 23)) - self.menubar.setObjectName("menubar") - MainWindow.setMenuBar(self.menubar) - self.statusbar = QtWidgets.QStatusBar(MainWindow) - self.statusbar.setObjectName("statusbar") - MainWindow.setStatusBar(self.statusbar) - self.retranslateUi(MainWindow) - QtCore.QMetaObject.connectSlotsByName(MainWindow) - - def retranslateUi(self, MainWindow): - _translate = QtCore.QCoreApplication.translate - MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) - self.pushButton_2.setText(_translate("MainWindow", "暂停")) - self.pushButton.setText(_translate("MainWindow", "播放")) diff --git a/实践资源-软件需求构思及描述模板.docx b/实践资源-软件需求构思及描述模板.docx deleted file mode 100644 index 3e5f11d..0000000 Binary files a/实践资源-软件需求构思及描述模板.docx and /dev/null differ