Pyqt5 --小工具功能实现【一】
主界面展示:
文章目录
前言
1、首先需要明晰工具的功能及其设计(包括:UI部分和逻辑程序部分):
该小工具分为四个功能模块;
【1】图片格式转化模块;
【2】图片转GIF模块;
【3】图片轮播模块;
【4】视频转图片模块;
2、首先设计UI,通过Pyqt5工具设计,自动编译为python可识别UI程序;(这里不作详述安装及使用方法,如有需要,可自行查找相关资料学习)
3、逻辑程序:主要分为主程序(界面修改,逻辑功能控制)和QT线程启用程序(为了执行占用资源和持续性运行的功能程序)
一、图片格式转化模块:
(1)功能使用说明:
1.1 点击浏览按钮,选择图片路径,点击打开按钮;
1.2 勾选批量选择,点击浏览按钮,选择图片存放的文件夹;
1.3 选择单张,选择图片转化格式,点击转化按钮,保存转换格式后的图片;
1.4 选择多张,选择图片转化格式,点击转化按钮,保存转换格式后的图片;
自动创建对应图片格式转化后的保存文件夹路径
1.5 选择单张或者多张,点击修改按钮,修改图片的分辨率,自动保存至对应路径;
自动保存到目录下【图片修改分辨率保存】的文件夹内
二、图片转GIF模块:
(1)功能使用说明:
2.1 点击浏览按钮,选择多图片文件夹存放路径后,展示栏中自动添加图片名称;
2.2 勾选展示图片后,点击展示栏中的图片名称,界面自动显示对应图片;
2.3 双击展示栏中的图片名称,对应图片会自动添加至GIF图片生成展示栏;
2.4 自动生成GIF,并播放GIF;
如果不勾选自动命名,则以第一个图片命名生成GIF的名称
延时:设置GIF 图片之间切换的时间间隔![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d406056ee396405695f61c7e24d83051.gif
三、图片轮播模块:
(1)功能使用说明:
3.1 图片循环播放;
延时:图片循环切换的时间间隔
3.2 音频播放;
循环:音乐持续循环播放
3.2 合成视频;将循环播放的图片与音乐结合,合成视频
注意:这里存在视频时长计算:帧率【已知】 = 图片张数【已知】 /视频时长【该时间不会超过音频时长】,想要理解,自行理解代码,此处不作详述,嘿嘿,反正我就理解这么多╮( ̄▽ ̄)╭
四、视频转图片模块:
(1)功能使用说明:
4.1 点击浏览按钮,选择视频路径,直接播放视频;
4.2 选择开始时间和结束时间,将该段时间的视频分割为图片;
4.3 选择开始时间和结束时间,将该段时间的视频分割为新视频保存;
五、其他功能模块:
5.1 打开程序运行本地目录的文件夹;
5.2 重启小工具功能模块;
六、代码功能模块介绍:
文件概述:
需要安装的第三方包:用于视频剪辑的功能
安装完成后,需要找到config_defaults.py(python安装目录下的第三方库文件夹中,如:D:\python\Lib\site-packages\moviepy\config_defaults.py),随后,打开文件,修改成自己安装的对应路径即可。
6.1 主程序代码;【main_shixian.py】
import time
import os,logging
from UI_files.show_img_ui import Ui_MainWindow
import sys
from PyQt5.QtGui import QIcon,QColor,QDesktopServices,QPixmap, QPalette,QMovie # 用于添加图标
from PyQt5.QtWidgets import QFileDialog, QMessageBox,QMenu, QAction
from PyQt5.QtWidgets import QWidget,QApplication,QMenuBar,QListView,QMainWindow
from PyQt5.QtCore import pyqtSlot,Qt,QUrl,pyqtSignal, QThread, QBasicTimer
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
from PyQt5.QtMultimedia import QMediaMetaData
import traceback
from Qthread_control.qtthread import RunThread
import PIL.Image as Image
import imageio.v2 as imageio
import shutil
from UI_files.loadwin_ui import Ui_loadwin
#from PyQt5.QtMultimediaWidgets import QVideoWidget
class LoadWin(QWidget, Ui_loadwin): # 启动画面类
def __init__(self):
super(LoadWin, self).__init__()
self.setupUi(self)
self.setWindowFlags(Qt.FramelessWindowHint) # 无边框
self.setStyleSheet("#Form{background-color:'#4682B4'}"
"#label_info{background-color:'#4682B4';color:white;font-weight:600;}"
) # 设置启动窗背景色和进度信息的字体样式等
self.movie = QMovie("./UI_files/icon/斩.gif")
self.label_logo.setMovie(self.movie)
self.label_logo.setScaledContents(True) # 图像拉伸填充
self.movie.start()
self.timer = QBasicTimer() # 定时器对象
self.step = 0 # 进度值
self.proess_run()
self.ret = None
# 第一步执行流程
def proess_run(self): # 启动进度线程
self.cal = LoadThread() # 线程对象
self.cal.part_signal.connect(self.process_set_part)
self.cal.data_signal.connect(self.show_main_win)
self.cal.start() # 调用线程run
def process_set_part(self, num):
self.step = num # 进度从num开始
self.progressBar.setValue(self.step)
if num == 0:
self.timer.start(20, self) # 启动QBasicTimer, 每20毫秒调用一次回调函数
self.label_info.setText("等待主页加载...")
def timerEvent(self, *args, **kwargs): # QBasicTimer的事件回调函数
self.progressBar.setValue(self.step) # 设置进度条的值
if self.step < 100:
self.step += 1
else:
self.cal.set_ret()
# 显示主界面
def show_main_win(self, mes):
w.close()
print(mes)
ui2.show()
class LoadThread(QThread): # 自定义计算线程类 -----------
part_signal = pyqtSignal(int) # 进度信号
data_signal = pyqtSignal(str) # 数据传输信号
def __init__(self):
super().__init__()
self.ret = None
# 启动线程
def run(self):
# 该消息发送后,启用process_set_part函数
self.part_signal.emit(0)
while True:
if self.ret == True:
self.data_signal.emit("计算结果:2023 要结束了!") #发送消息使主界面功能加载
break
else:
time.sleep(1)
continue
# 建立标志
def set_ret(self):
self.ret = True
class Power_test(Ui_MainWindow,QMainWindow):
def __init__(self):
super().__init__() # 使用超类,继承父类的属性及方法
self.setupUi(self) # 构造窗体界面
self.setWindowIcon(QIcon("./UI_files/icon/icon.png"))
self.setWindowTitle("小工具V1.0 ") # 设置窗体主体
self.intUI()
def intUI(self):
self.tab_function()
self.player = QMediaPlayer() # 定义播放器
self.player.setVideoOutput(self.mywidget) # 视频播放输出的窗口,ui自定义
self.tab4_pushButton_pause.clicked.connect(self.playPause)
self.current_img_path_show = None
self.chushihua_funtion()
self.img_name = ["png","jpg","jpeg","bmp"]
self.tab3_pushButton3.setEnabled(False)
self.tab3_pushButton5.setEnabled(False)
self.tab3_comboBox1.setEditable(True)
self.music_ret = None
self.menu_add()
self.video_int()
def yichangchuli(func=None):
def deco(self,*args, **kwargs):
# print(func.__name__) #获取方法名称
try:
res = func(self,*args, **kwargs)
return res
except Exception as error:
error = traceback.format_exc()
print(error)
return deco
# 添加打开本地文件夹按钮
def menu_add(self):
add_opeen= QAction("打开",self)
add_opeen.setShortcut('Ctrl+F')
add_opeen.triggered.connect(self.open_local_file)
self.menuFile.addAction(add_opeen)
add_opeens= QAction("重启工具",self)
add_opeens.setShortcut('Ctrl+S')
add_opeens.triggered.connect(self.restartApp)
self.menuFile.addAction(add_opeens)
# 打开本地文件夹
def open_local_file(self):
path = os.getcwd()
QDesktopServices.openUrl(QUrl.fromLocalFile(path))
'''图片格式化===start'''
def tab_function(self):
self.tab1_pushButton_up.setDisabled(True)
self.tab1_pushButton_down.setDisabled(True)
self.tab1_lineEdit3.setPlaceholderText("请输入宽度和高度,例如:500,700")
# 选择文件按钮
@pyqtSlot()
def on_tab1_pushButton1_clicked(self):
path = os.getcwd()
if self.tab1_checkBox.isChecked():
folder_path = QFileDialog.getExistingDirectory(self, "选择文件夹")
if folder_path == "":
return
self.tab1_lineEdit1.setText(folder_path)
self.tab_function()
else:
fileInfo = QFileDialog.getOpenFileName(self, "选择文件", path,'Image files (*.jpg *.gif *.png *.jpeg )')
if fileInfo[0] == "":
return
else:
self.tab1_lineEdit1.setText(fileInfo[0])
self.tab_function()
self.current_img_path_show = False
# 打开图片,界面显示图片
@pyqtSlot()
def on_tab1_pushButton_open1_clicked(self):
# 获取图片目录
if self.tab1_checkBox.isChecked():
self.imgnumber = 0
self.tab1_pushButton_up.setDisabled(False)
self.tab1_pushButton_down.setDisabled(False)
path = self.tab1_lineEdit1.text()
if path =="":
print("无文件夹路径加载!")
self.statusBar_function('无文件夹路径加载!',2000)
return
# 列出文件名称
img_files = os.listdir(path)
print(img_files)
self.imgfiles = []
for img in img_files:
# 只显示第一张图片
for imggehsi in self.img_name:
if imggehsi in img:
self.imgfiles.append(img)
if len(self.imgfiles) > 0:
self.allnumbers = len(self.imgfiles) -1
self.tab1_showimg.setPixmap(QPixmap(path + "/" +self.imgfiles[0])) #选择路径
self.tab1_showimg.setScaledContents(True) #图片大小与label适应,否则图片可能显示不全
# 当前显示图片路径
self.current_img_path_show = path + "/" +self.imgfiles[0]
else:
self.statusBar_function('当前目录下无图片加载成功!',2000)
else:
path = self.tab1_lineEdit1.text()
if path =="":
print("无图片路径加载!")
self.statusBar_function('无图片路径加载!',2000)
return
self.tab1_showimg.setPixmap(QPixmap(path))
self.tab1_showimg.setScaledContents(True)
# 当前显示图片路径
self.current_img_path_show = path
# 上一张图片
@pyqtSlot()
def on_tab1_pushButton_up_clicked(self):
if self.imgnumber == 0:
self.statusBar_function('当前已为第一张图片',3000)
else:
self.imgnumber = self.imgnumber -1
path = self.tab1_lineEdit1.text()
self.tab1_showimg.setPixmap(QPixmap(path + "/" +self.imgfiles[self.imgnumber] ))
self.current_img_path = path + "/" +self.imgfiles[self.imgnumber]
self.tab1_showimg.setScaledContents(True)
# 当前显示图片路径
self.current_img_path_show = path + "/" +self.imgfiles[self.imgnumber]
# 下一张图片
@pyqtSlot()
def on_tab1_pushButton_down_clicked(self):
try:
if self.imgnumber >= self.allnumbers:
self.statusBar_function('当前已为最后一张图片',2000)
return
self.imgnumber = self.imgnumber +1
if self.imgnumber <= self.allnumbers:
path = self.tab1_lineEdit1.text()
self.tab1_showimg.setPixmap(QPixmap(path + "/" +self.imgfiles[self.imgnumber] ))
self.tab1_showimg.setScaledContents(True)
# 当前显示图片路径
self.current_img_path_show = path + "/" +self.imgfiles[self.imgnumber]
else:
self.statusBar_function('当前已为最后一张图片',2000)
return
except Exception:
return
# 保存路径
@pyqtSlot()
def on_tab1_pushButton2_clicked(self):
folder_path = QFileDialog.getExistingDirectory(self, "选择文件夹")
if folder_path == "":
return
self.tab1_lineEdit2.setText(folder_path)
@pyqtSlot()
def on_tab1_pushButton_open2_clicked(self):
folder = self.tab1_lineEdit2.text()
if folder == "":
self.statusBar_function('未选择文件夹路径',2000)
return
os.startfile(folder)
# 转化功能按钮
@pyqtSlot()
def on_tab1_pushButton_zhuanhua_clicked(self):
# 获取图片单张或者批量参数
shuju1 = self.tab1_comboBox1.currentText()
# 获取图片转化格式
geshi =self.tab1_comboBox2.currentText()
savepath = self.tab1_lineEdit2.text()
if shuju1 == "单张":
if self.current_img_path_show ==None:
self.statusBar_function('未选择图片路径',2000)
return
elif self.current_img_path_show == False:
self.statusBar_function('需要先打开图片',2000)
return
if savepath == "":
self.statusBar_function('未选择转化图片后的保存路径',2000)
return
else:
if os.path.exists(savepath) == False:
self.statusBar_function('保存路径填写异常',2000)
return
paths = [self.current_img_path_show,geshi,savepath]
# 将当前图片转化,保存至保存路径
self.thread_1 = RunThread(parent="one_image_change",msg=paths)
self.thread_1.trigger.connect(self.send_information)
self.thread_1.start()
elif shuju1 == "批量":
xuanzhepath = self.tab1_lineEdit1.text()
if os.path.isdir(xuanzhepath) == False:
self.statusBar_function('请选择图片保存的文件夹路径',2000)
return
if savepath == "":
self.statusBar_function('未选择转化图片后的保存路径',2000)
return
else:
if os.path.exists(savepath) == False:
self.statusBar_function('保存路径填写异常',2000)
return
paths = [xuanzhepath,geshi,savepath]
# 将当前文件夹内的所有图片转化,保存至保存路径
self.thread_2 = RunThread(parent="more_image_change",msg=paths)
self.thread_2.trigger.connect(self.send_information)
self.thread_2.start()
# 修改图片的分辨率
@pyqtSlot()
def on_tab1_pushButton_xiugai_clicked(self):
# 图片路径或者文件夹路径
path1 =self.tab1_lineEdit1.text()
if os.path.isfile(path1):
# 获取选择
xuanzhe = self.tab1_comboBox3.currentText()
if xuanzhe == "单张":
pass
else:
self.statusBar_function('分辨率:应选择单张选项',2000)
return
elif os.path.isdir(path1):
# 获取选择
xuanzhe = self.tab1_comboBox3.currentText()
if xuanzhe == "批量":
pass
else:
self.statusBar_function('分辨率:应选择批量选项',2000)
return
else:
self.statusBar_function('分辨率:图片路径选择异常',2000)
return
# 获取分辨率
width_high = self.tab1_lineEdit3.text()
if "," in width_high:
w_h = tuple(width_high.split(","))
elif "," in width_high:
w_h = tuple(width_high.split(","))
else:
self.statusBar_function('分辨率:宽度和高度参数设置异常',2000)
return
# 保存路径
save_path = os.getcwd()
save_path = save_path+"//图片修改分辨率保存" +"//{}X{}".format(w_h[0],w_h[1])
if not os.path.exists(save_path):
os.makedirs(save_path)
shujulist = [xuanzhe,path1,w_h,save_path]
self.thread_2 = RunThread(parent="resize_images",msg=shujulist)
self.thread_2.trigger.connect(self.send_information)
self.thread_2.start()
'''图片格式化===end'''
'''共用函数 -- start'''
def get_time(self):
shijian = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
return shijian
def send_information(self,text=[]):
#接收信息
time_now = self.get_time()
if text[0] == "0":
self.textBrowser.append("<font color=\"#0000FF\">{}:检测IP地址连通.....</font> ".format(time_now)) # 设置字体颜色
elif text[0] == "info":
self.textBrowser.append("{}:{}".format(time_now,text[1]))
elif text[0] == "prompt":
time_now = ("<font color=\"#FF0000\">{}:</font> ".format(time_now))
if text[2] == None:
self.textBrowser.append("{}<font color=\"#0000FF\">{}</font> ".format(time_now,text[1])) # 设置字体颜色
elif text[2] == "3":
self.tab3_textBrowser_1.append("{}<font color=\"#0000FF\">{}</font> ".format(time_now,text[1])) # 设置字体颜色
elif text[2] == "4":
self.tab4_textBrowser.append("{}<font color=\"#0000FF\">{}</font> ".format(time_now,text[1])) # 设置字体颜色
elif text[0] == "read":
if text[2] == None:
self.textBrowser.append("<font color=\"#FF0000\">{}:{}</font> ".format(time_now,text[1])) # 设置字体颜色
elif text[2] == "3":
self.tab3_textBrowser_1.append("{}<font color=\"#0000FF\">{}</font> ".format(time_now,text[1])) # 设置字体颜色
elif text[2] == "4":
self.tab4_textBrowser.append("{}<font color=\"#0000FF\">{}</font> ".format(time_now,text[1])) # 设置字体颜色
elif text[0] == "green":
time_now = ("<font color=\"#FF0000\">{}:</font> ".format(time_now))
self.textBrowser.append("{}<font color=\"#00C957\">{}</font> ".format(time_now,text[1])) # 设置字体颜
elif text[0] == "自动打开文件夹":
os.startfile(text[1])
elif text[0] == "img_path":
path0 = text[1]
self.set_img_show(path0)
elif text[0] == "change_bofang":
self.tab3_pushButton3.setText("播放")
if "音频设备初始化错误!" in text[1]:
return
# 重复播放
if self.music_ret == True:
self.on_tab3_pushButton3_clicked()
'''共用函数 --end'''
'''图片转GIG ---start'''
def chushihua_funtion(self):
self.tab2_listWidget1.itemDoubleClicked.connect(self.additem) #绑定点击事件
self.tab2_listWidget1.itemClicked.connect(self.showimg)
self.tab2_listWidget2.setMovement(QListView.Free)
self.tab2_listWidget2.setDragDropMode(QListView.InternalMove)
self.tab2_listWidget2.itemDoubleClicked.connect(self.showitem) #绑定点击事件
self.giffution()
def giffution(self):
self.tab2_listWidget1.clear()
self.tab2_pushButton_play.setEnabled(False)
def showimg(self):
selected_item = self.tab2_listWidget1.currentItem()
if selected_item:
item_text = selected_item.text()
print(item_text)
if self.tab2_checkBox_1.isChecked():
path = self.tab2_lineEdit_1.text()
self.tab2_label_show.setPixmap(QPixmap(path + "/" + item_text))
self.tab2_label_show.setScaledContents(True)
# 图片显示至列表
def show_list(self):
add_list = self.tab2_listWidget1
folder_path = QFileDialog.getExistingDirectory(self, "选择文件夹")
if folder_path == "":
return
add_list.clear()
self.tab2_lineEdit_1.setText(folder_path)
# 查找文件夹中的图片
listfiles = os.listdir(folder_path)
for imagefile in listfiles:
for shuju in self.img_name:
if shuju in imagefile:
add_list.addItem(imagefile)
# 显示列表1中的功能,双击后,将数据填写在list2
def additem(self):
selected_item = self.tab2_listWidget1.currentItem()
if selected_item:
item_text = selected_item.text()
print(item_text)
self.tab2_listWidget2.addItem(item_text)
self.statusBar_function('成功添加{}'.format(item_text),2000,"green")
def showitem(self):
selected_item = self.tab2_listWidget2.currentItem()
if selected_item:
item_text = selected_item.text()
# print(item_text)
number = self.tab2_listWidget2.currentRow()
self.tab2_listWidget2.takeItem(number)
self.statusBar_function('成功删除{}'.format(item_text),2000)
# 获取需要组合的图片列表
def get_images_liebiao(self):
items = []
for i in range(self.tab2_listWidget2.count()):
items.append(self.tab2_listWidget2.item(i).text())
print(items)
if items == []:
self.statusBar_function('图片未正确选择!',2000)
return
path_use = self.tab2_lineEdit_1.text()
# 修改图片为统一分辨率
new_path = self.resize_image(path_use,items)
new_imgslist = os.listdir(new_path)
gif_name = self.get_gifname(new_imgslist)
duration = self.get_dur()
savepath = self.get_path()
if duration == None or savepath == None:
return
self.create_gif(new_imgslist,gif_name,duration,new_path)
# 删除创建的目录
time.sleep(0.5)
shutil.rmtree(new_path)
print("完成删除动作")
'''# 统一分辨率'''
# 文件夹 files:图片列表
def resize_image(self,path,files):
# 获取输入文件夹中的所有文件
output_dir = path +"/savefilesnow"
# 判断输出文件夹是否存在,不存在则创建
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for file in files:
img = Image.open(path +"\\"+ file)
if img.mode == "P":
img = img.convert('RGB')
if img.mode == "RGBA":
img = img.convert('RGB')
# 宽度 高度
img = img.resize((700, 500), Image.LANCZOS)
img.save(os.path.join(output_dir, file))
print(str(file) + " :图片分辨率更改成功!")
return output_dir
'''创作GIF图片'''
# 图片列表,GIF名称,延时时间(单位毫秒),保存路径
def create_gif(self,images, gif_name, duration,paths):
frames = []
for image_name in images:
frames.append(imageio.imread(paths + "/{}".format(image_name))) #传递图片路径给画面
imageio.mimsave(gif_name, frames, 'GIF', duration=duration,loop=0, disposal=2)
self.statusBar_function("GIF成功保存!",3000,"green")
self.tab2_lineEdit_4.setText(gif_name)
self.tab2_pushButton_play.setEnabled(True)
# 生成GIF按钮
@pyqtSlot()
def on_tab2_pushButton_make_clicked(self):
self.get_images_liebiao()
# 获取延时
def get_dur(self):
shuju = self.tab2_lineEdit_3.text()
if shuju.isdigit():
return float(shuju)*1000
else:
self.statusBar_function("延时设置错误!",3000)
return None
# 获取保存GIF路径
def get_path(self):
path = self.tab2_lineEdit_2.text()
if path == "" or path == None:
self.statusBar_function("GIF图片保存文件夹填写异常!",3000)
return None
if not os.path.exists(path):
os.makedirs(path)
return path
# 获取GIF名称
def get_gifname(self,path=None):
if self.tab2_checkBox_2.isChecked():
savepath = self.get_path()
if savepath == "" or savepath == None:
self.statusBar_function("GIF图片保存文件夹填写异常!",3000)
return
shijian = time.strftime('%Y_%m_%d_%H_%M_%S', time.localtime())
gifname= savepath + "/" +shijian+".gif"
return gifname
else:
savepath = self.get_path()
if savepath == "" or savepath == None:
self.statusBar_function("GIF图片保存文件夹填写异常!",3000)
return
gifname= savepath +"/"+ str(path[0]).split(".")[0]+".gif"
return gifname
@pyqtSlot()
def on_tab2_pushButton_1_clicked(self):
self.show_list()
@pyqtSlot()
def on_tab2_pushButton_2_clicked(self):
folder_path = QFileDialog.getExistingDirectory(self, "选择文件夹")
if folder_path == "":
return
self.tab2_lineEdit_2.setText(folder_path)
@pyqtSlot()
def on_tab2_pushButton_3_clicked(self):
path = os.getcwd()
fileInfo = QFileDialog.getOpenFileName(self, "选择文件", path,'Image files ( *.gif)')
if fileInfo[0] == "":
return
else:
self.tab2_lineEdit_4.setText(fileInfo[0])
self.tab2_pushButton_play.setEnabled(True)
@pyqtSlot()
def on_tab2_pushButton_play_clicked(self):
path = self.tab2_lineEdit_4.text()
movie = QMovie(path)
self.tab2_label_show.setMovie(movie)
self.tab2_label_show.setScaledContents(True)
if self.tab2_pushButton_play.text() == "播放":
movie.start()
self.tab2_pushButton_play.setText("暂停")
elif self.tab2_pushButton_play.text() == "暂停":
movie.stop()
self.tab2_pushButton_play.setText("播放")
'''图片转GIf ---end'''
'''图片轮播,插入音频 --- start'''
@pyqtSlot()
def on_tab3_pushButton1_clicked(self):
folder_path = QFileDialog.getExistingDirectory(self, "选择文件夹")
if folder_path == "":
return
self.tab3_lineEdit1.setText(folder_path)
# 获取时间
shijian = self.tab3_comboBox1.currentText()
# 创建右键菜单
self.tab3_label1.setContextMenuPolicy(Qt.CustomContextMenu)
self.tab3_label1.customContextMenuRequested.connect(self.show_menu)
# 启动QT线程
self.thread_3 = RunThread(parent="images_bofang",msg=[folder_path,shijian])
self.thread_3.trigger.connect(self.send_information)
self.thread_3.set_bofang_ret(zhuangtai=True)
self.thread_3.start()
self.tab3_pushButton1.setDisabled(True)
def set_img_show(self,path=None):
try:
self.tab3_label1.setPixmap(QPixmap(path))
self.tab3_label1.setScaledContents(True)
except Exception as error:
print("错误异常:",error)
# Qlable中添加右键菜单
def show_menu(self, pos):
menu = QMenu(self)
action1 = QAction('播放', self)
action2 = QAction('暂停', self)
action3 = QAction('结束播放', self)
menu.addAction(action1)
menu.addAction(action2)
menu.addAction(action3)
action1.triggered.connect(self.set_thread_ret0)
action2.triggered.connect(self.set_thread_ret1)
action3.triggered.connect(self.set_thread_ret2)
menu.exec_(self.tab3_label1.mapToGlobal(pos))
def set_thread_ret0(self):
self.thread_3.set_bofang_ret(zhuangtai=True)
def set_thread_ret1(self):
self.thread_3.set_bofang_ret(zhuangtai=False)
def set_thread_ret2(self):
self.thread_3.set_bofang_ret(zhuangtai="break")
time.sleep(0.5)
self.tab3_pushButton1.setDisabled(False)
self.statusBar_function('结束播放!',2000)
# 播放音乐
@pyqtSlot()
def on_tab3_pushButton3_clicked(self):
caozuo = self.tab3_pushButton3.text()
if caozuo == "播放":
file = self.tab3_lineEdit2.text()
# 启动QT线程
self.thread_4 = RunThread(parent="music_bofang",msg=[file])
self.thread_4.trigger.connect(self.send_information)
self.thread_4.start()
self.tab3_pushButton3.setText("循环")
self.music_ret = True
self.tab3_textBrowser_1.append("<font color=\"#0000FF\">{}:循环播放音乐中...</font> ".format(self.get_time())) # 设置字体颜色"
elif caozuo == "循环":
self.tab3_pushButton3.setText("停止")
elif caozuo == "停止":
self.thread_4.set_caozuo_ret()
self.tab3_pushButton3.setText("播放")
self.music_ret = False
self.tab3_textBrowser_1.append("<font color=\"#0000FF\">{}:暂停播放音乐!</font> ".format(self.get_time())) # 设置字体颜色"
# 播放音乐路径
@pyqtSlot()
def on_tab3_pushButton2_clicked(self):
path = os.getcwd()
fileInfo = QFileDialog.getOpenFileName(self, "选择文件", path,'music file (*)')
if fileInfo[0] == "":
return
self.tab3_lineEdit2.setText(fileInfo[0])
self.tab3_pushButton3.setEnabled(True)
# 保存视频路径
@pyqtSlot()
def on_tab3_pushButton4_clicked(self):
path = os.getcwd()
folder_path = QFileDialog.getExistingDirectory(self, "选择文件夹")
if folder_path == "":
return
self.tab3_lineEdit3.setText(folder_path)
self.tab3_pushButton5.setEnabled(True)
# 合成视频
@pyqtSlot()
def on_tab3_pushButton5_clicked(self):
# 判断前提条件
# 保存路径
save_file = self.tab3_lineEdit3.text()
# 多图片路径
images = self.tab3_lineEdit1.text()
# 音乐路径
music_file =self.tab3_lineEdit2.text()
# 帧率设置
fps = float(self.tab3_lineEdit1_2.text())
if type(fps)== float:
pass
else:
self.statusBar_function("帧率数值设置异常!",3000)
return
# 启动QT线程
self.thread_5 = RunThread(parent="video_create",msg=[images,music_file,save_file])
self.thread_5.trigger.connect(self.send_information)
self.thread_5.start()
'''图片轮播,插入音频 --- end'''
'''视频播放+转图片----start'''
def video_int(self):
self.starttime = None
self.tab4_lineEdit1.setDisabled(True)
self.tab4_lineEdit2.setDisabled(True)
self.tab4_pushButton_split_image.setDisabled(True)
self.tab4_pushButton_split_video.setDisabled(True)
def video_set(self):
# 进度条
self.player.durationChanged.connect(self.getDuration)
self.player.positionChanged.connect(self.getPosition)
self.horizontalSlider.sliderMoved.connect(self.updatePosition)
self.tab4_pushButton_split_image.setDisabled(False)
self.tab4_pushButton_split_video.setDisabled(False)
# 浏览播放视频
@pyqtSlot()
def on_tab4_pushButton_1_clicked(self):
ret = self.video_funtion()
if ret == True:
self.video_set()
def video_funtion(self):
path = QFileDialog.getOpenFileUrl()[0]
print(path.fileName(),type(path))
print(path.path())
if path.fileName() == "" or "mp4" not in path.fileName():
self.statusBar_function("视频文件加载出错!",3000)
return False
try:
self.player.setMedia(QMediaContent(path)) # 选取视频文件
self.player.play()
self.video_paths = path.path().replace("/","",1)
self.tab4_pushButton_pause.setText("暂停")
self.send_information(text=["prompt","开始播放...","4"])
except Exception:
error = traceback.format_exc()
print(error)
self.statusBar_function("视频文件加载出错!",3000)
return False
return True
# 播放和暂停视频
def playPause(self):
if self.player.state()==1:
self.player.pause()
self.tab4_pushButton_pause.setText("播放")
self.send_information(text=["prompt","暂停播放!","4"])
else:
self.player.play()
self.tab4_pushButton_pause.setText("暂停")
self.send_information(text=["prompt","开始播放...","4"])
# 视频总时长获取
def getDuration(self, d):
'''d是获取到的视频总时长(ms)'''
self.horizontalSlider.setRange(0, d)
self.horizontalSlider.setEnabled(True)
self.max_videotime =d
self.displayTime(d)
# 视频实时位置获取
def getPosition(self, p):
self.horizontalSlider.setValue(p)
# self.displayTime(self.horizontalSlider.maximum()-p)
self.displayTime(p)
if p == self.horizontalSlider.maximum():
self.tab4_pushButton_pause.setText("播放")
self.media_status_changed()
# 显示剩余时间
def displayTime(self, ms):
minutes = int(ms/60000)
seconds = int((ms-minutes*60000)/1000)
self.tab4_baifenbi.setText('{}:{}/{}:{}'.format(minutes,seconds,minutes,int(self.max_videotime/1000)))
# 记录时间
self.starttime = '{}:{}'.format(minutes,seconds)
# 用进度条更新视频位置
def updatePosition(self, v):
self.player.setPosition(v)
self.displayTime(self.horizontalSlider.maximum()-v)
def media_status_changed(self):
frame_rate = self.player.metaData(QMediaMetaData.VideoFrameRate)
# print("Frame rate:", frame_rate)
# 选择当前开始时间
@pyqtSlot()
def on_tab4_pushButton_2_clicked(self):
print(self.starttime)
if self.starttime == None:
self.statusBar_function(text="未选择播放视频!",time=3000)
return
self.tab4_lineEdit1.setText(self.starttime)
# 选择结束时间
@pyqtSlot()
def on_tab4_pushButton_3_clicked(self):
print(self.starttime)
if self.starttime == None:
self.statusBar_function(text="未选择播放视频!",time=3000)
return
self.tab4_lineEdit2.setText(self.starttime)
# 分割图片
@pyqtSlot()
def on_tab4_pushButton_split_image_clicked(self):
if self.tab4_lineEdit1.text() == "" or self.tab4_lineEdit2.text() =="":
self.statusBar_function(text="未选择起止时间!")
return
self.split_video_img()
def split_video_img(self):
# 需要传递的数据,视频路径,开始时间和结束时间
folder_path = self.video_paths
starttimes = self.tab4_lineEdit1.text()
endtimes = self.tab4_lineEdit2.text()
shijian = [starttimes,endtimes]
# 启动QT线程
self.thread_tab41 = RunThread(parent="split_video_img",msg=[folder_path,shijian])
self.thread_tab41.trigger.connect(self.send_information)
self.thread_tab41.start()
# 分割视频
@pyqtSlot()
def on_tab4_pushButton_split_video_clicked(self):
if self.tab4_lineEdit1.text() == "" or self.tab4_lineEdit2.text() =="":
self.statusBar_function(text="未选择起止时间!")
return
self.split_video()
def split_video(self):
# 需要传递的数据,视频路径,开始时间和结束时间
folder_path = self.video_paths
starttimes = self.return_startvideo_time()
endtimes = self.return_endvideo_time()
shijian = [starttimes,endtimes]
self.thread_tab42 = RunThread(parent="split_video",msg=[folder_path,shijian])
self.thread_tab42.trigger.connect(self.send_information)
self.thread_tab42.start()
def return_startvideo_time(self):
starttimes = self.tab4_lineEdit1.text().split(":")
starttime = float(starttimes[0])*60 + float(starttimes[1])
return starttime
def return_endvideo_time(self):
starttimes = self.tab4_lineEdit2.text().split(":")
starttime = float(starttimes[0])*60 + float(starttimes[1])
return starttime
'''视频播放+转图片----end'''
# 状态栏显示
def statusBar_function(self,text,time=2000,color=None):
palette = self.statusBar().palette()
if color == None:
# 修改字体颜色
palette.setColor(QPalette.WindowText, QColor(255, 0, 0))
elif color == "green":
# 修改字体颜色
palette.setColor(QPalette.WindowText, QColor(0, 255, 0))
self.statusBar().setPalette(palette)
self.statusBar().showMessage(text,time)
# 重新启动APP
def restartApp(self):
python = sys.executable
os.execl(python, python, *sys.argv)
def set_data(self, mes): # 接收进度线程的计算结果
self.statusBar_function(mes)
if __name__ == "__main__":
app = QApplication(sys.argv)
# 设置应用程序的风格
app.setStyle('Fusion')
w = LoadWin()
w.show()
ui2 = Power_test()
sys.exit(app.exec_())
6.2 业务逻辑程序代码;【qtthread.py】
from PyQt5.QtCore import pyqtSignal,QThread
from PIL import Image
import traceback
import os
import time
from pygame import mixer
from moviepy.editor import *
from moviepy.audio.io.AudioFileClip import AudioFileClip
#业务线程
class RunThread(QThread):
# 通过类成员对象定义信号对象
# _signal = pyqtSignal(str)
trigger = pyqtSignal(list)
def __init__(self, parent=None,msg=None):
super(RunThread, self).__init__()
self.parent = parent
self.msg = msg
# def __del__(self): #等待
# self.wait()
'''处理业务逻辑'''
def run(self):
#识别业务命令,在进行执行
try:
if self.parent == "one_image_change":
self.oneimagechange()
elif self.parent == "more_image_change":
self.moreimagechange()
elif self.parent == "resize_images":
self.xiugai_fenbianlv()
elif self.parent == "images_bofang":
self.images_bofang()
self.bofang_ret= None
elif self.parent == "music_bofang":
self.music_play()
self.caozuo_ret = None
elif self.parent == "video_create":
self.video_create()
elif self.parent == "split_video":
self.split_video()
elif self.parent == "split_video_img":
self.split_video_img()
except Exception:
errors = traceback.format_exc()
print(errors)
# 单张图片转化
def oneimagechange(self):
img = self.msg[0] # 输入转换前的图片存放路径
name = str(img).split("/")[-1].split(".")[0]
strs = self.msg[2]
output = strs + "/{}.{}".format(name,self.msg[1]) # 转换后的格式
im = Image.open(img)
im.save(output)#保存图片
self.send_emit(change="green",result="图片转化成功--" + output)
# 多张图片转化
def moreimagechange(self):
# 图片存放文件夹目录
files_saveimage = self.msg[0]
images = os.listdir(files_saveimage)
# 选择的格式
geshi = self.msg[1]
# 图片转化后保存的文件夹目录
savepath = self.msg[2]
if os.path.exists(savepath+"/"+geshi):
pass
else:
os.mkdir(savepath+"/"+geshi)
for i in images:
img = str(files_saveimage +"/" +i)
name = str(img).split("/")[-1].split(".")[0]
output = savepath+"/"+geshi +"/" + name + ".{}".format(geshi) # 转换后的格式
im = Image.open(img)
im.save(output) # 保存图片
self.send_emit(change="green",result="图片转化成功---" + output)
time.sleep(0.1)
# 分辨率转化
def xiugai_fenbianlv(self):
xuanzhe = self.msg[0]
input_image_path = self.msg[1]
new_width,new_height = self.msg[2] # 给元组
output_image_path = self.msg[3]
if xuanzhe == "单张":
imgname = str(input_image_path).split("/")[-1]
image = Image.open(input_image_path)
resized_image = image.resize((int(new_width), int(new_height)))
resized_image.save(output_image_path +"/{}".format(imgname))
self.send_emit(change="green",result="图片分辨率修改成功:" + output_image_path +"/{}".format(imgname))
elif xuanzhe == "批量":
imglist = os.listdir(input_image_path)
for img in imglist:
print(img)
image = Image.open(input_image_path + "/{}".format(img))
resized_image = image.resize((int(new_width), int(new_height)))
resized_image.save(output_image_path + "/{}".format(img))
self.send_emit(change="green",result="图片分辨率修改成功:" + output_image_path)
self.send_emit(change="自动打开文件夹" ,result=output_image_path)
# 图片轮播
def images_bofang(self):
path =self.msg[0]
shijina = float(self.msg[1])
# 图片自动轮播
images = os.listdir(path)
while True:
if self.bofang_ret== None or self.bofang_ret== False:
time.sleep(1)
print("检查中")
continue
elif self.bofang_ret== True:
for image in images:
time.sleep(shijina)
self.send_emit(change="img_path",result="{}".format(path+"/"+image))
elif self.bofang_ret== "break":
print("播放结束!")
break
# 修改状态
def set_bofang_ret(self,zhuangtai=None):
self.bofang_ret= zhuangtai
# 停止播放音乐
def set_caozuo_ret(self):
mixer.music.stop()
# 发送信息
def send_emit(self,change="info",result="",tab=None):
self.trigger.emit([change, result,tab])
# 播放音乐
def music_play(self):
try:
file =self.msg[0]
print("路径:" +file)
mixer.init()
except Exception as error:
print(error)
self.send_emit(change="change_bofang",result="{}:音频设备初始化错误!".format(error))
return
mixer.music.load(file)
# 设置音乐播放完成事件
mixer.music.set_endevent()
mixer.music.set_volume(5)
mixer.music.play()
shuju = mixer.music.get_busy()
print(shuju)
# 获取音乐时长
length = mixer.Sound(file).get_length()
self.send_emit(change="prompt",result="播放音乐时长:{}".format(length/60),tab="3")
# 监听事件
while True:
ret = mixer.music.get_busy()
if ret == True:
continue
else:
print('音乐播放完成')
self.send_emit(change="change_bofang",result="播放")
mixer.music.stop()
break
# 生成视频
def video_create(self):
fps = 0.5
image_path = self.msg[0]
music_path = self.msg[1]
save_path = self.msg[2]
print(image_path)
print(music_path)
print(save_path)
try:
# 循环遍历图片
images = os.listdir(image_path)
clip = ImageSequenceClip([os.path.join(image_path, img)for img in images], fps=fps)
path = save_path + "./{}.mp4".format(self.get_time())
clip.write_videofile(path)
video = VideoFileClip(path)
audio = AudioFileClip(music_path)
video_duration = video.duration
# 获取音频长度
audio_duration = audio.duration
self.send_emit(change="prompt",result="音频长度:{}".format(audio_duration),tab="3")
# 长度必须保持一致
if audio_duration > video_duration:
audio = audio.subclip(0, video_duration)
newvideo = video.set_audio(audio)
newvideo.write_videofile(path)
self.send_emit(change="prompt",result="视频合成完成:{}".format(path),tab="3")
except Exception as error:
print(error)
self.send_emit(change="read",result="{}".format(error),tab="3")
def get_time(self):
shijian = time.strftime('%Y%m%d%H%M%S', time.localtime())
return shijian
def split_video(self):
folder_path = self.msg[0]
video = VideoFileClip(folder_path)
# 定义剪辑的起始和结束时间(以秒为单位)
start_time = self.msg[1][0]
end_time = self.msg[1][1]
# 对视频进行剪辑 ,开始时间,结束时间
clipped_video = video.subclip(start_time, end_time)
# 创建文件路径
path = os.getcwd() + "/分割视频"
if os.path.isdir(path):
pass
else:
os.mkdir(path)
# 导出视频
savepath = path + "/output{}.mp4".format(self.get_time())
clipped_video.write_videofile(savepath)
self.send_emit(change="prompt",result="分割视频已完成:{}".format(savepath),tab="4")
def split_video_img(self):
folder_path = self.msg[0]
# 定义剪辑的起始和结束时间(以秒为单位)
start_time = self.msg[1][0]
end_time = self.msg[1][1]
time = 0
dir='./分割图片/'
if os.path.isdir(dir):
pass
else:
os.mkdir(dir)
# 对视频进行剪辑 ,开始时间,结束时间
video = VideoFileClip(folder_path)
clipped_video = video.subclip(start_time, end_time)
videotimes = video.duration
print("视频时长:",videotimes)
frames = int(float(videotimes)/0.5)
for i in range(1,frames+1):
filename = os.path.join(dir+str(i)+'.jpg')
time = time + 0.5
clipped_video.save_frame(filename,t=time)
self.send_emit(change="prompt",result="分割图片已完成:{}".format(dir),tab="4")
6.3 加载界面py文件;【loadwin_ui.py】
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'f:\personaldata\img_video_chuli_gongju\UI_files\loadwin.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# 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_loadwin(object):
def setupUi(self, loadwin):
loadwin.setObjectName("loadwin")
loadwin.resize(455, 349)
self.gridLayout = QtWidgets.QGridLayout(loadwin)
self.gridLayout.setObjectName("gridLayout")
self.label_logo = QtWidgets.QLabel(loadwin)
self.label_logo.setMinimumSize(QtCore.QSize(0, 280))
self.label_logo.setText("")
self.label_logo.setObjectName("label_logo")
self.gridLayout.addWidget(self.label_logo, 0, 0, 1, 1)
self.label_info = QtWidgets.QLabel(loadwin)
self.label_info.setObjectName("label_info")
self.gridLayout.addWidget(self.label_info, 1, 0, 1, 1)
self.progressBar = QtWidgets.QProgressBar(loadwin)
self.progressBar.setProperty("value", 24)
self.progressBar.setObjectName("progressBar")
self.gridLayout.addWidget(self.progressBar, 2, 0, 1, 1)
self.retranslateUi(loadwin)
QtCore.QMetaObject.connectSlotsByName(loadwin)
def retranslateUi(self, loadwin):
_translate = QtCore.QCoreApplication.translate
loadwin.setWindowTitle(_translate("loadwin", "Form"))
self.label_info.setText(_translate("loadwin", "TextLabel"))
6.4 主界面py程序代码;【show_img_ui.py】
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'f:\personaldata\img_video_chuli_gongju\UI_files\show_img.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# 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_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(605, 535)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout_5 = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout_5.setObjectName("gridLayout_5")
self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.gridLayout_3 = QtWidgets.QGridLayout(self.tab)
self.gridLayout_3.setObjectName("gridLayout_3")
self.tab1_checkBox = QtWidgets.QCheckBox(self.tab)
self.tab1_checkBox.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_checkBox.setObjectName("tab1_checkBox")
self.gridLayout_3.addWidget(self.tab1_checkBox, 0, 5, 1, 1)
self.tab1_pushButton2 = QtWidgets.QPushButton(self.tab)
self.tab1_pushButton2.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_pushButton2.setObjectName("tab1_pushButton2")
self.gridLayout_3.addWidget(self.tab1_pushButton2, 1, 3, 1, 1)
self.tab1_pushButton_open2 = QtWidgets.QPushButton(self.tab)
self.tab1_pushButton_open2.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_pushButton_open2.setObjectName("tab1_pushButton_open2")
self.gridLayout_3.addWidget(self.tab1_pushButton_open2, 1, 4, 1, 1)
self.tab1_label3 = QtWidgets.QLabel(self.tab)
self.tab1_label3.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_label3.setFrameShape(QtWidgets.QFrame.Panel)
self.tab1_label3.setFrameShadow(QtWidgets.QFrame.Raised)
self.tab1_label3.setObjectName("tab1_label3")
self.gridLayout_3.addWidget(self.tab1_label3, 7, 0, 1, 1)
self.tab1_label1 = QtWidgets.QLabel(self.tab)
self.tab1_label1.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_label1.setFrameShape(QtWidgets.QFrame.Panel)
self.tab1_label1.setFrameShadow(QtWidgets.QFrame.Raised)
self.tab1_label1.setObjectName("tab1_label1")
self.gridLayout_3.addWidget(self.tab1_label1, 0, 0, 1, 1)
self.tab1_comboBox1 = QtWidgets.QComboBox(self.tab)
self.tab1_comboBox1.setObjectName("tab1_comboBox1")
self.tab1_comboBox1.addItem("")
self.tab1_comboBox1.addItem("")
self.gridLayout_3.addWidget(self.tab1_comboBox1, 2, 7, 1, 1)
self.tab1_pushButton_down = QtWidgets.QPushButton(self.tab)
self.tab1_pushButton_down.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_pushButton_down.setObjectName("tab1_pushButton_down")
self.gridLayout_3.addWidget(self.tab1_pushButton_down, 7, 2, 1, 1)
self.tab1_pushButton_zhuanhua = QtWidgets.QPushButton(self.tab)
self.tab1_pushButton_zhuanhua.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_pushButton_zhuanhua.setObjectName("tab1_pushButton_zhuanhua")
self.gridLayout_3.addWidget(self.tab1_pushButton_zhuanhua, 4, 7, 1, 1)
self.tab1_pushButton1 = QtWidgets.QPushButton(self.tab)
self.tab1_pushButton1.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_pushButton1.setObjectName("tab1_pushButton1")
self.gridLayout_3.addWidget(self.tab1_pushButton1, 0, 3, 1, 1)
self.tab1_label2 = QtWidgets.QLabel(self.tab)
self.tab1_label2.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_label2.setFrameShape(QtWidgets.QFrame.Panel)
self.tab1_label2.setFrameShadow(QtWidgets.QFrame.Raised)
self.tab1_label2.setObjectName("tab1_label2")
self.gridLayout_3.addWidget(self.tab1_label2, 1, 0, 1, 1)
self.tab1_lineEdit1 = QtWidgets.QLineEdit(self.tab)
self.tab1_lineEdit1.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_lineEdit1.setStyleSheet("background-color: rgb(213, 213, 213);")
self.tab1_lineEdit1.setObjectName("tab1_lineEdit1")
self.gridLayout_3.addWidget(self.tab1_lineEdit1, 0, 1, 1, 2)
self.tab1_lineEdit2 = QtWidgets.QLineEdit(self.tab)
self.tab1_lineEdit2.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_lineEdit2.setObjectName("tab1_lineEdit2")
self.gridLayout_3.addWidget(self.tab1_lineEdit2, 1, 1, 1, 2)
self.tab1_comboBox2 = QtWidgets.QComboBox(self.tab)
self.tab1_comboBox2.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_comboBox2.setStyleSheet("background-color: rgb(0, 170, 0);")
self.tab1_comboBox2.setObjectName("tab1_comboBox2")
self.tab1_comboBox2.addItem("")
self.tab1_comboBox2.addItem("")
self.tab1_comboBox2.addItem("")
self.tab1_comboBox2.addItem("")
self.tab1_comboBox2.addItem("")
self.gridLayout_3.addWidget(self.tab1_comboBox2, 3, 7, 1, 1)
self.tab1_pushButton_up = QtWidgets.QPushButton(self.tab)
self.tab1_pushButton_up.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_pushButton_up.setObjectName("tab1_pushButton_up")
self.gridLayout_3.addWidget(self.tab1_pushButton_up, 7, 1, 1, 1)
self.tab1_pushButton_open1 = QtWidgets.QPushButton(self.tab)
self.tab1_pushButton_open1.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_pushButton_open1.setObjectName("tab1_pushButton_open1")
self.gridLayout_3.addWidget(self.tab1_pushButton_open1, 0, 4, 1, 1)
self.textBrowser = QtWidgets.QTextBrowser(self.tab)
self.textBrowser.setMaximumSize(QtCore.QSize(150, 16777215))
self.textBrowser.setObjectName("textBrowser")
self.gridLayout_3.addWidget(self.textBrowser, 5, 7, 1, 1)
self.tab1_comboBox3 = QtWidgets.QComboBox(self.tab)
self.tab1_comboBox3.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_comboBox3.setObjectName("tab1_comboBox3")
self.tab1_comboBox3.addItem("")
self.tab1_comboBox3.addItem("")
self.gridLayout_3.addWidget(self.tab1_comboBox3, 7, 3, 1, 1)
self.tab1_pushButton_xiugai = QtWidgets.QPushButton(self.tab)
self.tab1_pushButton_xiugai.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_pushButton_xiugai.setObjectName("tab1_pushButton_xiugai")
self.gridLayout_3.addWidget(self.tab1_pushButton_xiugai, 7, 7, 1, 1)
self.tab1_lineEdit3 = QtWidgets.QLineEdit(self.tab)
self.tab1_lineEdit3.setMinimumSize(QtCore.QSize(0, 25))
self.tab1_lineEdit3.setObjectName("tab1_lineEdit3")
self.gridLayout_3.addWidget(self.tab1_lineEdit3, 7, 5, 1, 1)
self.tab1_label_4 = QtWidgets.QLabel(self.tab)
self.tab1_label_4.setFrameShape(QtWidgets.QFrame.Panel)
self.tab1_label_4.setFrameShadow(QtWidgets.QFrame.Raised)
self.tab1_label_4.setObjectName("tab1_label_4")
self.gridLayout_3.addWidget(self.tab1_label_4, 7, 4, 1, 1)
self.tab1_showimg = QtWidgets.QLabel(self.tab)
self.tab1_showimg.setMinimumSize(QtCore.QSize(300, 250))
self.tab1_showimg.setStyleSheet("background-color: rgb(255, 239, 219);")
self.tab1_showimg.setFrameShape(QtWidgets.QFrame.Panel)
self.tab1_showimg.setFrameShadow(QtWidgets.QFrame.Sunken)
self.tab1_showimg.setText("")
self.tab1_showimg.setObjectName("tab1_showimg")
self.gridLayout_3.addWidget(self.tab1_showimg, 2, 0, 5, 6)
self.tabWidget.addTab(self.tab, "")
self.tab_4 = QtWidgets.QWidget()
self.tab_4.setObjectName("tab_4")
self.gridLayout = QtWidgets.QGridLayout(self.tab_4)
self.gridLayout.setObjectName("gridLayout")
self.tab2_checkBox_1 = QtWidgets.QCheckBox(self.tab_4)
self.tab2_checkBox_1.setObjectName("tab2_checkBox_1")
self.gridLayout.addWidget(self.tab2_checkBox_1, 1, 1, 1, 1)
self.tab2_pushButton_play = QtWidgets.QPushButton(self.tab_4)
self.tab2_pushButton_play.setMinimumSize(QtCore.QSize(0, 25))
self.tab2_pushButton_play.setObjectName("tab2_pushButton_play")
self.gridLayout.addWidget(self.tab2_pushButton_play, 11, 4, 1, 1)
self.tab2_pushButton_make = QtWidgets.QPushButton(self.tab_4)
self.tab2_pushButton_make.setMinimumSize(QtCore.QSize(0, 25))
self.tab2_pushButton_make.setObjectName("tab2_pushButton_make")
self.gridLayout.addWidget(self.tab2_pushButton_make, 7, 1, 1, 1)
self.tab2_label_1 = QtWidgets.QLabel(self.tab_4)
self.tab2_label_1.setMinimumSize(QtCore.QSize(0, 25))
self.tab2_label_1.setObjectName("tab2_label_1")
self.gridLayout.addWidget(self.tab2_label_1, 0, 1, 1, 1)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem, 3, 3, 1, 1)
self.tab2_label_2 = QtWidgets.QLabel(self.tab_4)
self.tab2_label_2.setMinimumSize(QtCore.QSize(0, 25))
self.tab2_label_2.setObjectName("tab2_label_2")
self.gridLayout.addWidget(self.tab2_label_2, 2, 1, 1, 1)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem1, 0, 5, 1, 1)
self.tab2_label_3 = QtWidgets.QLabel(self.tab_4)
self.tab2_label_3.setMinimumSize(QtCore.QSize(0, 25))
self.tab2_label_3.setObjectName("tab2_label_3")
self.gridLayout.addWidget(self.tab2_label_3, 3, 1, 1, 1)
self.tab2_listWidget1 = QtWidgets.QListWidget(self.tab_4)
self.tab2_listWidget1.setMaximumSize(QtCore.QSize(300, 16777215))
self.tab2_listWidget1.setObjectName("tab2_listWidget1")
item = QtWidgets.QListWidgetItem()
self.tab2_listWidget1.addItem(item)
item = QtWidgets.QListWidgetItem()
self.tab2_listWidget1.addItem(item)
item = QtWidgets.QListWidgetItem()
self.tab2_listWidget1.addItem(item)
item = QtWidgets.QListWidgetItem()
self.tab2_listWidget1.addItem(item)
self.gridLayout.addWidget(self.tab2_listWidget1, 0, 0, 6, 1)
self.tab2_pushButton_1 = QtWidgets.QPushButton(self.tab_4)
self.tab2_pushButton_1.setMinimumSize(QtCore.QSize(100, 25))
self.tab2_pushButton_1.setMaximumSize(QtCore.QSize(150, 16777215))
self.tab2_pushButton_1.setObjectName("tab2_pushButton_1")
self.gridLayout.addWidget(self.tab2_pushButton_1, 0, 2, 1, 1)
self.tab2_label_4 = QtWidgets.QLabel(self.tab_4)
self.tab2_label_4.setMinimumSize(QtCore.QSize(0, 25))
self.tab2_label_4.setObjectName("tab2_label_4")
self.gridLayout.addWidget(self.tab2_label_4, 11, 1, 1, 1)
self.tab2_checkBox_2 = QtWidgets.QCheckBox(self.tab_4)
self.tab2_checkBox_2.setObjectName("tab2_checkBox_2")
self.gridLayout.addWidget(self.tab2_checkBox_2, 6, 1, 1, 1)
self.tab2_listWidget2 = QtWidgets.QListWidget(self.tab_4)
self.tab2_listWidget2.setMinimumSize(QtCore.QSize(0, 230))
self.tab2_listWidget2.setMaximumSize(QtCore.QSize(300, 16777215))
self.tab2_listWidget2.setObjectName("tab2_listWidget2")
self.gridLayout.addWidget(self.tab2_listWidget2, 6, 0, 6, 1)
self.tab2_lineEdit_2 = QtWidgets.QLineEdit(self.tab_4)
self.tab2_lineEdit_2.setMinimumSize(QtCore.QSize(0, 25))
self.tab2_lineEdit_2.setMaximumSize(QtCore.QSize(16777215, 16777215))
self.tab2_lineEdit_2.setObjectName("tab2_lineEdit_2")
self.gridLayout.addWidget(self.tab2_lineEdit_2, 2, 3, 1, 2)
self.tab2_pushButton_2 = QtWidgets.QPushButton(self.tab_4)
self.tab2_pushButton_2.setMinimumSize(QtCore.QSize(100, 25))
self.tab2_pushButton_2.setMaximumSize(QtCore.QSize(150, 16777215))
self.tab2_pushButton_2.setObjectName("tab2_pushButton_2")
self.gridLayout.addWidget(self.tab2_pushButton_2, 2, 2, 1, 1)
self.tab2_pushButton_3 = QtWidgets.QPushButton(self.tab_4)
self.tab2_pushButton_3.setMinimumSize(QtCore.QSize(0, 25))
self.tab2_pushButton_3.setMaximumSize(QtCore.QSize(150, 16777215))
self.tab2_pushButton_3.setObjectName("tab2_pushButton_3")
self.gridLayout.addWidget(self.tab2_pushButton_3, 11, 2, 1, 1)
self.tab2_label_show = QtWidgets.QLabel(self.tab_4)
self.tab2_label_show.setEnabled(True)
self.tab2_label_show.setMinimumSize(QtCore.QSize(400, 250))
self.tab2_label_show.setMaximumSize(QtCore.QSize(16777215, 16777215))
self.tab2_label_show.setStyleSheet("background-color: rgb(192, 200, 188);")
self.tab2_label_show.setFrameShape(QtWidgets.QFrame.Panel)
self.tab2_label_show.setFrameShadow(QtWidgets.QFrame.Raised)
self.tab2_label_show.setText("")
self.tab2_label_show.setObjectName("tab2_label_show")
self.gridLayout.addWidget(self.tab2_label_show, 4, 2, 7, 4)
self.tab2_lineEdit_3 = QtWidgets.QLineEdit(self.tab_4)
self.tab2_lineEdit_3.setMinimumSize(QtCore.QSize(50, 25))
self.tab2_lineEdit_3.setMaximumSize(QtCore.QSize(150, 16777215))
self.tab2_lineEdit_3.setObjectName("tab2_lineEdit_3")
self.gridLayout.addWidget(self.tab2_lineEdit_3, 3, 2, 1, 1)
self.tab2_lineEdit_1 = QtWidgets.QLineEdit(self.tab_4)
self.tab2_lineEdit_1.setMinimumSize(QtCore.QSize(0, 25))
self.tab2_lineEdit_1.setMaximumSize(QtCore.QSize(16777215, 16777215))
self.tab2_lineEdit_1.setObjectName("tab2_lineEdit_1")
self.gridLayout.addWidget(self.tab2_lineEdit_1, 0, 3, 1, 2)
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem2, 11, 5, 1, 1)
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem3, 2, 5, 1, 1)
self.tab2_lineEdit_4 = QtWidgets.QLineEdit(self.tab_4)
self.tab2_lineEdit_4.setMinimumSize(QtCore.QSize(0, 25))
self.tab2_lineEdit_4.setMaximumSize(QtCore.QSize(16777215, 16777215))
self.tab2_lineEdit_4.setObjectName("tab2_lineEdit_4")
self.gridLayout.addWidget(self.tab2_lineEdit_4, 11, 3, 1, 1)
self.tab2_checkBox_1.raise_()
self.tab2_pushButton_play.raise_()
self.tab2_pushButton_make.raise_()
self.tab2_label_1.raise_()
self.tab2_label_2.raise_()
self.tab2_label_3.raise_()
self.tab2_listWidget1.raise_()
self.tab2_pushButton_1.raise_()
self.tab2_label_4.raise_()
self.tab2_checkBox_2.raise_()
self.tab2_listWidget2.raise_()
self.tab2_lineEdit_2.raise_()
self.tab2_pushButton_2.raise_()
self.tab2_pushButton_3.raise_()
self.tab2_label_show.raise_()
self.tab2_lineEdit_3.raise_()
self.tab2_lineEdit_4.raise_()
self.tab2_lineEdit_1.raise_()
self.tabWidget.addTab(self.tab_4, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
self.gridLayout_2 = QtWidgets.QGridLayout(self.tab_2)
self.gridLayout_2.setObjectName("gridLayout_2")
self.tab3_lineEdit1 = QtWidgets.QLineEdit(self.tab_2)
self.tab3_lineEdit1.setMinimumSize(QtCore.QSize(100, 25))
self.tab3_lineEdit1.setMaximumSize(QtCore.QSize(900, 16777215))
self.tab3_lineEdit1.setObjectName("tab3_lineEdit1")
self.gridLayout_2.addWidget(self.tab3_lineEdit1, 0, 1, 1, 2)
self.tab3_label_3 = QtWidgets.QLabel(self.tab_2)
self.tab3_label_3.setMinimumSize(QtCore.QSize(0, 25))
self.tab3_label_3.setFrameShape(QtWidgets.QFrame.Panel)
self.tab3_label_3.setFrameShadow(QtWidgets.QFrame.Raised)
self.tab3_label_3.setObjectName("tab3_label_3")
self.gridLayout_2.addWidget(self.tab3_label_3, 7, 0, 1, 1)
self.tab3_pushButton2 = QtWidgets.QPushButton(self.tab_2)
self.tab3_pushButton2.setMinimumSize(QtCore.QSize(0, 25))
self.tab3_pushButton2.setMaximumSize(QtCore.QSize(100, 16777215))
self.tab3_pushButton2.setObjectName("tab3_pushButton2")
self.gridLayout_2.addWidget(self.tab3_pushButton2, 6, 4, 1, 1)
self.tab3_label_4 = QtWidgets.QLabel(self.tab_2)
self.tab3_label_4.setMinimumSize(QtCore.QSize(0, 25))
self.tab3_label_4.setFrameShape(QtWidgets.QFrame.Panel)
self.tab3_label_4.setFrameShadow(QtWidgets.QFrame.Raised)
self.tab3_label_4.setObjectName("tab3_label_4")
self.gridLayout_2.addWidget(self.tab3_label_4, 0, 4, 1, 1)
self.tab3_label1 = QtWidgets.QLabel(self.tab_2)
self.tab3_label1.setMinimumSize(QtCore.QSize(200, 200))
self.tab3_label1.setStyleSheet("background-color: rgb(186, 186, 186);")
self.tab3_label1.setFrameShape(QtWidgets.QFrame.WinPanel)
self.tab3_label1.setFrameShadow(QtWidgets.QFrame.Sunken)
self.tab3_label1.setText("")
self.tab3_label1.setObjectName("tab3_label1")
self.gridLayout_2.addWidget(self.tab3_label1, 1, 0, 5, 11)
spacerItem4 = QtWidgets.QSpacerItem(60, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_2.addItem(spacerItem4, 0, 8, 1, 1)
self.tab3_lineEdit2 = QtWidgets.QLineEdit(self.tab_2)
self.tab3_lineEdit2.setMinimumSize(QtCore.QSize(0, 25))
self.tab3_lineEdit2.setObjectName("tab3_lineEdit2")
self.gridLayout_2.addWidget(self.tab3_lineEdit2, 6, 1, 1, 3)
self.tab3_label_5 = QtWidgets.QLabel(self.tab_2)
self.tab3_label_5.setMinimumSize(QtCore.QSize(0, 25))
self.tab3_label_5.setFrameShape(QtWidgets.QFrame.Panel)
self.tab3_label_5.setFrameShadow(QtWidgets.QFrame.Raised)
self.tab3_label_5.setObjectName("tab3_label_5")
self.gridLayout_2.addWidget(self.tab3_label_5, 0, 6, 1, 1)
self.tab3_pushButton3 = QtWidgets.QPushButton(self.tab_2)
self.tab3_pushButton3.setMinimumSize(QtCore.QSize(0, 25))
self.tab3_pushButton3.setObjectName("tab3_pushButton3")
self.gridLayout_2.addWidget(self.tab3_pushButton3, 6, 5, 1, 1)
self.tab3_comboBox1 = QtWidgets.QComboBox(self.tab_2)
self.tab3_comboBox1.setMinimumSize(QtCore.QSize(0, 25))
self.tab3_comboBox1.setStyleSheet("background-color: rgb(193, 193, 193);")
self.tab3_comboBox1.setObjectName("tab3_comboBox1")
self.tab3_comboBox1.addItem("")
self.tab3_comboBox1.addItem("")
self.tab3_comboBox1.addItem("")
self.gridLayout_2.addWidget(self.tab3_comboBox1, 0, 5, 1, 1)
self.tab3_pushButton5 = QtWidgets.QPushButton(self.tab_2)
self.tab3_pushButton5.setMinimumSize(QtCore.QSize(0, 25))
self.tab3_pushButton5.setObjectName("tab3_pushButton5")
self.gridLayout_2.addWidget(self.tab3_pushButton5, 7, 5, 1, 1)
self.tab3_pushButton1 = QtWidgets.QPushButton(self.tab_2)
self.tab3_pushButton1.setMinimumSize(QtCore.QSize(0, 25))
self.tab3_pushButton1.setObjectName("tab3_pushButton1")
self.gridLayout_2.addWidget(self.tab3_pushButton1, 0, 3, 1, 1)
self.tab3_label_2 = QtWidgets.QLabel(self.tab_2)
self.tab3_label_2.setMinimumSize(QtCore.QSize(0, 25))
self.tab3_label_2.setMaximumSize(QtCore.QSize(16777215, 16777215))
self.tab3_label_2.setFrameShape(QtWidgets.QFrame.Panel)
self.tab3_label_2.setFrameShadow(QtWidgets.QFrame.Raised)
self.tab3_label_2.setObjectName("tab3_label_2")
self.gridLayout_2.addWidget(self.tab3_label_2, 6, 0, 1, 1)
self.tab3_label_1 = QtWidgets.QLabel(self.tab_2)
self.tab3_label_1.setMinimumSize(QtCore.QSize(0, 25))
self.tab3_label_1.setFrameShape(QtWidgets.QFrame.Panel)
self.tab3_label_1.setFrameShadow(QtWidgets.QFrame.Raised)
self.tab3_label_1.setObjectName("tab3_label_1")
self.gridLayout_2.addWidget(self.tab3_label_1, 0, 0, 1, 1)
self.tab3_pushButton4 = QtWidgets.QPushButton(self.tab_2)
self.tab3_pushButton4.setMinimumSize(QtCore.QSize(0, 25))
self.tab3_pushButton4.setObjectName("tab3_pushButton4")
self.gridLayout_2.addWidget(self.tab3_pushButton4, 7, 4, 1, 1)
self.tab3_lineEdit3 = QtWidgets.QLineEdit(self.tab_2)
self.tab3_lineEdit3.setMinimumSize(QtCore.QSize(0, 25))
self.tab3_lineEdit3.setObjectName("tab3_lineEdit3")
self.gridLayout_2.addWidget(self.tab3_lineEdit3, 7, 1, 1, 3)
self.tab3_lineEdit1_2 = QtWidgets.QLineEdit(self.tab_2)
self.tab3_lineEdit1_2.setMinimumSize(QtCore.QSize(0, 25))
self.tab3_lineEdit1_2.setObjectName("tab3_lineEdit1_2")
self.gridLayout_2.addWidget(self.tab3_lineEdit1_2, 0, 7, 1, 1)
self.tab3_textBrowser_1 = QtWidgets.QTextBrowser(self.tab_2)
self.tab3_textBrowser_1.setObjectName("tab3_textBrowser_1")
self.gridLayout_2.addWidget(self.tab3_textBrowser_1, 6, 6, 2, 5)
self.tabWidget.addTab(self.tab_2, "")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setObjectName("tab_3")
self.gridLayout_4 = QtWidgets.QGridLayout(self.tab_3)
self.gridLayout_4.setObjectName("gridLayout_4")
self.tab4_baifenbi = QtWidgets.QLabel(self.tab_3)
self.tab4_baifenbi.setObjectName("tab4_baifenbi")
self.gridLayout_4.addWidget(self.tab4_baifenbi, 1, 4, 1, 1)
self.horizontalSlider = QtWidgets.QSlider(self.tab_3)
self.horizontalSlider.setMinimumSize(QtCore.QSize(0, 25))
self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
self.horizontalSlider.setObjectName("horizontalSlider")
self.gridLayout_4.addWidget(self.horizontalSlider, 1, 3, 1, 1)
self.tab4_pushButton_split_video = QtWidgets.QPushButton(self.tab_3)
self.tab4_pushButton_split_video.setMinimumSize(QtCore.QSize(0, 25))
self.tab4_pushButton_split_video.setObjectName("tab4_pushButton_split_video")
self.gridLayout_4.addWidget(self.tab4_pushButton_split_video, 3, 2, 1, 1)
self.tab4_lineEdit2 = QtWidgets.QLineEdit(self.tab_3)
self.tab4_lineEdit2.setMinimumSize(QtCore.QSize(0, 25))
self.tab4_lineEdit2.setMaximumSize(QtCore.QSize(100, 16777215))
self.tab4_lineEdit2.setObjectName("tab4_lineEdit2")
self.gridLayout_4.addWidget(self.tab4_lineEdit2, 3, 1, 1, 1)
self.tab4_pushButton_pause = QtWidgets.QPushButton(self.tab_3)
self.tab4_pushButton_pause.setMinimumSize(QtCore.QSize(50, 25))
self.tab4_pushButton_pause.setMaximumSize(QtCore.QSize(100, 16777215))
self.tab4_pushButton_pause.setObjectName("tab4_pushButton_pause")
self.gridLayout_4.addWidget(self.tab4_pushButton_pause, 1, 1, 1, 1)
self.mywidget = QVideoWidget(self.tab_3)
self.mywidget.setStyleSheet("background-color: rgb(0, 0, 0);")
self.mywidget.setObjectName("mywidget")
self.gridLayout_4.addWidget(self.mywidget, 0, 0, 1, 5)
self.tab4_pushButton_1 = QtWidgets.QPushButton(self.tab_3)
self.tab4_pushButton_1.setMinimumSize(QtCore.QSize(60, 25))
self.tab4_pushButton_1.setObjectName("tab4_pushButton_1")
self.gridLayout_4.addWidget(self.tab4_pushButton_1, 1, 0, 1, 1)
self.tab4_pushButton_3 = QtWidgets.QPushButton(self.tab_3)
self.tab4_pushButton_3.setMinimumSize(QtCore.QSize(0, 25))
self.tab4_pushButton_3.setObjectName("tab4_pushButton_3")
self.gridLayout_4.addWidget(self.tab4_pushButton_3, 3, 0, 1, 1)
self.tab4_textBrowser = QtWidgets.QTextBrowser(self.tab_3)
self.tab4_textBrowser.setMaximumSize(QtCore.QSize(16777215, 16777215))
self.tab4_textBrowser.setObjectName("tab4_textBrowser")
self.gridLayout_4.addWidget(self.tab4_textBrowser, 2, 3, 2, 2)
self.tab4_label_1 = QtWidgets.QLabel(self.tab_3)
self.tab4_label_1.setObjectName("tab4_label_1")
self.gridLayout_4.addWidget(self.tab4_label_1, 1, 2, 1, 1)
self.tab4_pushButton_2 = QtWidgets.QPushButton(self.tab_3)
self.tab4_pushButton_2.setMinimumSize(QtCore.QSize(0, 25))
self.tab4_pushButton_2.setObjectName("tab4_pushButton_2")
self.gridLayout_4.addWidget(self.tab4_pushButton_2, 2, 0, 1, 1)
self.tab4_lineEdit1 = QtWidgets.QLineEdit(self.tab_3)
self.tab4_lineEdit1.setMinimumSize(QtCore.QSize(0, 25))
self.tab4_lineEdit1.setMaximumSize(QtCore.QSize(100, 16777215))
self.tab4_lineEdit1.setObjectName("tab4_lineEdit1")
self.gridLayout_4.addWidget(self.tab4_lineEdit1, 2, 1, 1, 1)
self.tab4_pushButton_split_image = QtWidgets.QPushButton(self.tab_3)
self.tab4_pushButton_split_image.setMinimumSize(QtCore.QSize(0, 25))
self.tab4_pushButton_split_image.setObjectName("tab4_pushButton_split_image")
self.gridLayout_4.addWidget(self.tab4_pushButton_split_image, 2, 2, 1, 1)
self.tabWidget.addTab(self.tab_3, "")
self.gridLayout_5.addWidget(self.tabWidget, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 605, 23))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.menubar.addAction(self.menuFile.menuAction())
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(3)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.tab1_checkBox.setText(_translate("MainWindow", "批量选择"))
self.tab1_pushButton2.setText(_translate("MainWindow", "浏览"))
self.tab1_pushButton_open2.setText(_translate("MainWindow", "打开"))
self.tab1_label3.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">图片查看:</p></body></html>"))
self.tab1_label1.setText(_translate("MainWindow", "路径选择:"))
self.tab1_comboBox1.setItemText(0, _translate("MainWindow", "单张"))
self.tab1_comboBox1.setItemText(1, _translate("MainWindow", "批量"))
self.tab1_pushButton_down.setText(_translate("MainWindow", "下一张"))
self.tab1_pushButton_zhuanhua.setText(_translate("MainWindow", "转化"))
self.tab1_pushButton1.setText(_translate("MainWindow", "浏览"))
self.tab1_label2.setText(_translate("MainWindow", "保存路径:"))
self.tab1_comboBox2.setItemText(0, _translate("MainWindow", "png"))
self.tab1_comboBox2.setItemText(1, _translate("MainWindow", "jpeg"))
self.tab1_comboBox2.setItemText(2, _translate("MainWindow", "jpg"))
self.tab1_comboBox2.setItemText(3, _translate("MainWindow", "bmp"))
self.tab1_comboBox2.setItemText(4, _translate("MainWindow", "pdf"))
self.tab1_pushButton_up.setText(_translate("MainWindow", "上一张"))
self.tab1_pushButton_open1.setText(_translate("MainWindow", "打开"))
self.tab1_comboBox3.setItemText(0, _translate("MainWindow", "单张"))
self.tab1_comboBox3.setItemText(1, _translate("MainWindow", "批量"))
self.tab1_pushButton_xiugai.setText(_translate("MainWindow", "修改"))
self.tab1_label_4.setText(_translate("MainWindow", "分辨率:"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "图片格式转化"))
self.tab2_checkBox_1.setText(_translate("MainWindow", "展示图片"))
self.tab2_pushButton_play.setText(_translate("MainWindow", "播放"))
self.tab2_pushButton_make.setText(_translate("MainWindow", "生成GIF"))
self.tab2_label_1.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">图片路径:</p></body></html>"))
self.tab2_label_2.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">GIF保存路径:</p></body></html>"))
self.tab2_label_3.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">延时(s):</p></body></html>"))
__sortingEnabled = self.tab2_listWidget1.isSortingEnabled()
self.tab2_listWidget1.setSortingEnabled(False)
item = self.tab2_listWidget1.item(0)
item.setText(_translate("MainWindow", "222"))
item = self.tab2_listWidget1.item(1)
item.setText(_translate("MainWindow", "333"))
item = self.tab2_listWidget1.item(2)
item.setText(_translate("MainWindow", "4444"))
item = self.tab2_listWidget1.item(3)
item.setText(_translate("MainWindow", "111"))
self.tab2_listWidget1.setSortingEnabled(__sortingEnabled)
self.tab2_pushButton_1.setText(_translate("MainWindow", "浏览"))
self.tab2_label_4.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">GIF选择:</p></body></html>"))
self.tab2_checkBox_2.setText(_translate("MainWindow", "自动命名"))
self.tab2_pushButton_2.setText(_translate("MainWindow", "浏览"))
self.tab2_pushButton_3.setText(_translate("MainWindow", "浏览"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("MainWindow", "图片转GIF"))
self.tab3_label_3.setText(_translate("MainWindow", "视频路径:"))
self.tab3_pushButton2.setText(_translate("MainWindow", "浏览"))
self.tab3_label_4.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">延时:</p></body></html>"))
self.tab3_label_5.setText(_translate("MainWindow", "帧率:"))
self.tab3_pushButton3.setText(_translate("MainWindow", "播放"))
self.tab3_comboBox1.setItemText(0, _translate("MainWindow", "1"))
self.tab3_comboBox1.setItemText(1, _translate("MainWindow", "2"))
self.tab3_comboBox1.setItemText(2, _translate("MainWindow", "3"))
self.tab3_pushButton5.setText(_translate("MainWindow", "合成"))
self.tab3_pushButton1.setText(_translate("MainWindow", "浏览"))
self.tab3_label_2.setText(_translate("MainWindow", "音频路径:"))
self.tab3_label_1.setText(_translate("MainWindow", "路径选择:"))
self.tab3_pushButton4.setText(_translate("MainWindow", "浏览"))
self.tab3_lineEdit1_2.setText(_translate("MainWindow", "0.5"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "图片轮播"))
self.tab4_baifenbi.setText(_translate("MainWindow", "0"))
self.tab4_pushButton_split_video.setText(_translate("MainWindow", "分割视频"))
self.tab4_pushButton_pause.setText(_translate("MainWindow", "暂停"))
self.tab4_pushButton_1.setText(_translate("MainWindow", "浏览"))
self.tab4_pushButton_3.setText(_translate("MainWindow", "结束时间"))
self.tab4_label_1.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">进度条:</p></body></html>"))
self.tab4_pushButton_2.setText(_translate("MainWindow", "开始时间"))
self.tab4_pushButton_split_image.setText(_translate("MainWindow", "分割图片"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "视频转图片"))
self.menuFile.setTitle(_translate("MainWindow", "File"))
from PyQt5.QtMultimediaWidgets import QVideoWidget
6.5 加载界面原始UI文件;【loadwin.ui】Pyqt5工具可打开
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>loadwin</class>
<widget class="QWidget" name="loadwin">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>455</width>
<height>349</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_logo">
<property name="minimumSize">
<size>
<width>0</width>
<height>280</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_info">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QProgressBar" name="progressBar">
<property name="value">
<number>24</number>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
6.6 主界面原始UI文件;【show_img.ui】Pyqt5工具可打开
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>605</width>
<height>535</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="0">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>3</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>图片格式转化</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="5">
<widget class="QCheckBox" name="tab1_checkBox">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>批量选择</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QPushButton" name="tab1_pushButton2">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>浏览</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QPushButton" name="tab1_pushButton_open2">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>打开</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="tab1_label3">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="text">
<string><html><head/><body><p align="center">图片查看:</p></body></html></string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="tab1_label1">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="text">
<string>路径选择:</string>
</property>
</widget>
</item>
<item row="2" column="7">
<widget class="QComboBox" name="tab1_comboBox1">
<item>
<property name="text">
<string>单张</string>
</property>
</item>
<item>
<property name="text">
<string>批量</string>
</property>
</item>
</widget>
</item>
<item row="7" column="2">
<widget class="QPushButton" name="tab1_pushButton_down">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>下一张</string>
</property>
</widget>
</item>
<item row="4" column="7">
<widget class="QPushButton" name="tab1_pushButton_zhuanhua">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>转化</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="tab1_pushButton1">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>浏览</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="tab1_label2">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="text">
<string>保存路径:</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="QLineEdit" name="tab1_lineEdit1">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(213, 213, 213);</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<widget class="QLineEdit" name="tab1_lineEdit2">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
</widget>
</item>
<item row="3" column="7">
<widget class="QComboBox" name="tab1_comboBox2">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(0, 170, 0);</string>
</property>
<item>
<property name="text">
<string>png</string>
</property>
</item>
<item>
<property name="text">
<string>jpeg</string>
</property>
</item>
<item>
<property name="text">
<string>jpg</string>
</property>
</item>
<item>
<property name="text">
<string>bmp</string>
</property>
</item>
<item>
<property name="text">
<string>pdf</string>
</property>
</item>
</widget>
</item>
<item row="7" column="1">
<widget class="QPushButton" name="tab1_pushButton_up">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>上一张</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="tab1_pushButton_open1">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>打开</string>
</property>
</widget>
</item>
<item row="5" column="7">
<widget class="QTextBrowser" name="textBrowser">
<property name="maximumSize">
<size>
<width>150</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="7" column="3">
<widget class="QComboBox" name="tab1_comboBox3">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<item>
<property name="text">
<string>单张</string>
</property>
</item>
<item>
<property name="text">
<string>批量</string>
</property>
</item>
</widget>
</item>
<item row="7" column="7">
<widget class="QPushButton" name="tab1_pushButton_xiugai">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>修改</string>
</property>
</widget>
</item>
<item row="7" column="5">
<widget class="QLineEdit" name="tab1_lineEdit3">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
</widget>
</item>
<item row="7" column="4">
<widget class="QLabel" name="tab1_label_4">
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="text">
<string>分辨率:</string>
</property>
</widget>
</item>
<item row="2" column="0" rowspan="5" colspan="6">
<widget class="QLabel" name="tab1_showimg">
<property name="minimumSize">
<size>
<width>300</width>
<height>250</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(255, 239, 219);</string>
</property>
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_4">
<attribute name="title">
<string>图片转GIF</string>
</attribute>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="1">
<widget class="QCheckBox" name="tab2_checkBox_1">
<property name="text">
<string>展示图片</string>
</property>
</widget>
</item>
<item row="11" column="4">
<widget class="QPushButton" name="tab2_pushButton_play">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>播放</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QPushButton" name="tab2_pushButton_make">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>生成GIF</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="tab2_label_1">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string><html><head/><body><p align="center">图片路径:</p></body></html></string>
</property>
</widget>
</item>
<item row="3" column="3">
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="1">
<widget class="QLabel" name="tab2_label_2">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string><html><head/><body><p align="center">GIF保存路径:</p></body></html></string>
</property>
</widget>
</item>
<item row="0" column="5">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="1">
<widget class="QLabel" name="tab2_label_3">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string><html><head/><body><p align="center">延时(s):</p></body></html></string>
</property>
</widget>
</item>
<item row="0" column="0" rowspan="6">
<widget class="QListWidget" name="tab2_listWidget1">
<property name="maximumSize">
<size>
<width>300</width>
<height>16777215</height>
</size>
</property>
<item>
<property name="text">
<string>222</string>
</property>
</item>
<item>
<property name="text">
<string>333</string>
</property>
</item>
<item>
<property name="text">
<string>4444</string>
</property>
</item>
<item>
<property name="text">
<string>111</string>
</property>
</item>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="tab2_pushButton_1">
<property name="minimumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>浏览</string>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QLabel" name="tab2_label_4">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string><html><head/><body><p align="center">GIF选择:</p></body></html></string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QCheckBox" name="tab2_checkBox_2">
<property name="text">
<string>自动命名</string>
</property>
</widget>
</item>
<item row="6" column="0" rowspan="6">
<widget class="QListWidget" name="tab2_listWidget2">
<property name="minimumSize">
<size>
<width>0</width>
<height>230</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>300</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="2" column="3" colspan="2">
<widget class="QLineEdit" name="tab2_lineEdit_2">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="tab2_pushButton_2">
<property name="minimumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>浏览</string>
</property>
</widget>
</item>
<item row="11" column="2">
<widget class="QPushButton" name="tab2_pushButton_3">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>浏览</string>
</property>
</widget>
</item>
<item row="4" column="2" rowspan="7" colspan="4">
<widget class="QLabel" name="tab2_label_show">
<property name="enabled">
<bool>true</bool>
</property>
<property name="minimumSize">
<size>
<width>400</width>
<height>250</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(192, 200, 188);</string>
</property>
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLineEdit" name="tab2_lineEdit_3">
<property name="minimumSize">
<size>
<width>50</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="0" column="3" colspan="2">
<widget class="QLineEdit" name="tab2_lineEdit_1">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="11" column="5">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="5">
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="11" column="3">
<widget class="QLineEdit" name="tab2_lineEdit_4">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
<zorder>tab2_checkBox_1</zorder>
<zorder>tab2_pushButton_play</zorder>
<zorder>tab2_pushButton_make</zorder>
<zorder>tab2_label_1</zorder>
<zorder>tab2_label_2</zorder>
<zorder>tab2_label_3</zorder>
<zorder>tab2_listWidget1</zorder>
<zorder>tab2_pushButton_1</zorder>
<zorder>tab2_label_4</zorder>
<zorder>tab2_checkBox_2</zorder>
<zorder>tab2_listWidget2</zorder>
<zorder>tab2_lineEdit_2</zorder>
<zorder>tab2_pushButton_2</zorder>
<zorder>tab2_pushButton_3</zorder>
<zorder>tab2_label_show</zorder>
<zorder>tab2_lineEdit_3</zorder>
<zorder>tab2_lineEdit_4</zorder>
<zorder>tab2_lineEdit_1</zorder>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>图片轮播</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="1" colspan="2">
<widget class="QLineEdit" name="tab3_lineEdit1">
<property name="minimumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>900</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="tab3_label_3">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="text">
<string>视频路径:</string>
</property>
</widget>
</item>
<item row="6" column="4">
<widget class="QPushButton" name="tab3_pushButton2">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>浏览</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QLabel" name="tab3_label_4">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="text">
<string><html><head/><body><p align="center">延时:</p></body></html></string>
</property>
</widget>
</item>
<item row="1" column="0" rowspan="5" colspan="11">
<widget class="QLabel" name="tab3_label1">
<property name="minimumSize">
<size>
<width>200</width>
<height>200</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(186, 186, 186);</string>
</property>
<property name="frameShape">
<enum>QFrame::WinPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="0" column="8">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>60</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="6" column="1" colspan="3">
<widget class="QLineEdit" name="tab3_lineEdit2">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
</widget>
</item>
<item row="0" column="6">
<widget class="QLabel" name="tab3_label_5">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="text">
<string>帧率:</string>
</property>
</widget>
</item>
<item row="6" column="5">
<widget class="QPushButton" name="tab3_pushButton3">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>播放</string>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QComboBox" name="tab3_comboBox1">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(193, 193, 193);</string>
</property>
<item>
<property name="text">
<string>1</string>
</property>
</item>
<item>
<property name="text">
<string>2</string>
</property>
</item>
<item>
<property name="text">
<string>3</string>
</property>
</item>
</widget>
</item>
<item row="7" column="5">
<widget class="QPushButton" name="tab3_pushButton5">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>合成</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="tab3_pushButton1">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>浏览</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="tab3_label_2">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="text">
<string>音频路径:</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="tab3_label_1">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="text">
<string>路径选择:</string>
</property>
</widget>
</item>
<item row="7" column="4">
<widget class="QPushButton" name="tab3_pushButton4">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>浏览</string>
</property>
</widget>
</item>
<item row="7" column="1" colspan="3">
<widget class="QLineEdit" name="tab3_lineEdit3">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
</widget>
</item>
<item row="0" column="7">
<widget class="QLineEdit" name="tab3_lineEdit1_2">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>0.5</string>
</property>
</widget>
</item>
<item row="6" column="6" rowspan="2" colspan="5">
<widget class="QTextBrowser" name="tab3_textBrowser_1"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>视频转图片</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_4">
<item row="1" column="4">
<widget class="QLabel" name="tab4_baifenbi">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QSlider" name="horizontalSlider">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QPushButton" name="tab4_pushButton_split_video">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>分割视频</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="tab4_lineEdit2">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="tab4_pushButton_pause">
<property name="minimumSize">
<size>
<width>50</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>暂停</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="5">
<widget class="QVideoWidget" name="mywidget" native="true">
<property name="styleSheet">
<string notr="true">background-color: rgb(0, 0, 0);</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="tab4_pushButton_1">
<property name="minimumSize">
<size>
<width>60</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>浏览</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="tab4_pushButton_3">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>结束时间</string>
</property>
</widget>
</item>
<item row="2" column="3" rowspan="2" colspan="2">
<widget class="QTextBrowser" name="tab4_textBrowser">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="tab4_label_1">
<property name="text">
<string><html><head/><body><p align="center">进度条:</p></body></html></string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="tab4_pushButton_2">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>开始时间</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="tab4_lineEdit1">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="tab4_pushButton_split_image">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>分割图片</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>605</width>
<height>23</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
</property>
</widget>
<addaction name="menuFile"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<customwidgets>
<customwidget>
<class>QVideoWidget</class>
<extends>QWidget</extends>
<header location="global">qvideowidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>