Commit 37fd21ce authored by 翟艳秋(20软)'s avatar 翟艳秋(20软)

fix: fix the syn between modification of subtitle and zm_tablewidget, add close…

fix: fix the syn between modification of subtitle and zm_tablewidget, add close of all windows, change the init of project and show selectedRow in all tables
parent dbd553fd
......@@ -25,6 +25,8 @@ from myvideoslider import myVideoSlider
from main_window_ui import Ui_MainWindow
import time
import constant
import copy
import sys
class MainWindow(QMainWindow, Ui_MainWindow):
......@@ -92,15 +94,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
"""
状态栏相关空间
"""
# self.statusbarButton = QtWidgets.QPushButton(self)
# # 设置按钮对象名称(不是按钮显示内容)
# self.statusbarButton.setObjectName("pred")
# # 设置按钮位置
# self.statusbarButton.setGeometry(QRect(10, 300, 93, 28))
# # 设置按钮显示内容
# self.statusbarButton.setText("敬请期待")
# self.statusbarButton.setEnabled(False)
self.statusbarLabel = QLabel()
self.statusbarLabel.setText(" 休息中")
......@@ -112,13 +105,22 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.progressBar.setValue(0)
# 进度条的进度
self.progressLabel = QLabel("0.00%")
# 状态栏的动作
self.statusbar.addPermanentWidget(self.statusbarLabel, stretch=1)
self.statusbar.addPermanentWidget(self.progressBar, stretch=9)
self.statusbar.addPermanentWidget(self.progressLabel, stretch=1)
# 菜单栏的动作
"""
菜单栏
"""
self.setting.triggered.connect(self.show_setting_dialog) # 设置
self.actiona_3.triggered.connect(self.show_detect_dialog)
self.actiona_4.triggered.connect(self.show_assemble_dialog)
self.action_3.triggered.connect(self.show_detect_dialog)
self.action_3.setEnabled(False)
self.action_4.triggered.connect(self.show_assemble_dialog)
self.action_4.setEnabled(False)
self.action_create.triggered.connect(self.show_create_dialog) # 新建工程
self.action_save.triggered.connect(self.save_project)
self.action_save.setEnabled(False)
self.import_movie.triggered.connect(self.import_slot)
self.import_movie.setEnabled(False)
self.action_open_project.triggered.connect(self.open_project_slot)
......@@ -136,11 +138,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.action_insert_aside_from_now.triggered.connect(self.insert_aside_from_now_slot)
self.action_insert_aside_from_now.setEnabled(False)
# 状态栏的动作
# self.statusbar.addPermanentWidget(self.statusbarButton, stretch=0)
self.statusbar.addPermanentWidget(self.statusbarLabel, stretch=1)
self.statusbar.addPermanentWidget(self.progressBar, stretch=9)
self.statusbar.addPermanentWidget(self.progressLabel, stretch=1)
"""
视频相关信息
"""
# 视频时长,全局变量
self.video_duration = None
......@@ -167,7 +167,12 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.sld_audio.valueChanged.connect(self.volumeChange) # 控制声音播放
self.kd_slider.valueChanged.connect(self.scale_change_slot)
"""
表格相关信息
"""
self.curTab = 0
# 设置表格每一列的宽度
self.tabWidget.currentChanged.connect(self.getTabId)
subtitle_header = self.projectContext.subtitle_header
self.zm_tableWidget.setColumnCount(len(subtitle_header))
self.zm_tableWidget.setHorizontalHeaderLabels(subtitle_header)
......@@ -261,6 +266,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.projectContext.save_project(False)
event.accept()
print("emit close Event")
sys.exit(0)
else:
event.ignore()
......@@ -288,23 +294,28 @@ class MainWindow(QMainWindow, Ui_MainWindow):
replp = QtWidgets.QMessageBox.question(self, u'警告', msg,
QtWidgets.QMessageBox.Yes)
# 新建工程后,初始化界面
# 在已打开一个工程的情况下打开或新建另一个工程,初始化界面
def init_project(self, project_path):
# 如果目前界面中正在处理其他工程,需要让用户确认是否退出当前界面
replp = QtWidgets.QMessageBox.question(self, u'警告', u'是否退出当前工程?',
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
if replp == QtWidgets.QMessageBox.Yes:
self.projectContext.save_project(False)
print("emit close Event")
# 把其他进程结束掉
for t in self.all_threads:
if t.is_alive():
stop_thread(t)
# 把project_path传递给start,在mainwindow初始化的时候传参进来
self.renew_signal.emit(project_path)
# 关闭当前窗口,刷新得到一个新窗口
QApplication.exit(MainWindow.EXIT_CODE_REBOOT)
if self.projectContext.project_base_dir is not None:
# 如果目前界面中正在处理其他工程,需要让用户确认是否退出当前界面
replp = QtWidgets.QMessageBox.question(self, u'警告', u'是否退出当前工程?',
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
if replp == QtWidgets.QMessageBox.Yes:
self.projectContext.save_project(False)
print("emit close Event")
# 把其他进程结束掉
for t in self.all_threads:
if t.is_alive():
stop_thread(t)
# 把project_path传递给start,在mainwindow初始化的时候传参进来
self.renew_signal.emit(project_path)
# 关闭当前窗口,刷新得到一个新窗口
QApplication.exit(MainWindow.EXIT_CODE_REBOOT)
else:
# 直接在当前界面刷新
self.projectContext.Init(project_path)
self.update_ui()
# 导入视频
......@@ -330,13 +341,16 @@ class MainWindow(QMainWindow, Ui_MainWindow):
print("[import_slot] project_path=" + project_path)
if project_path == "" or project_path == None:
return
self.projectContext.Init(project_path)
self.update_ui()
self.init_project(project_path)
def update_ui(self):
if self.projectContext.project_base_dir is None:
return
self.action_export.setEnabled(True)
self.action_3.setEnabled(True)
self.action_4.setEnabled(True)
self.action_save.setEnabled(True)
if self.projectContext.excel_path is not None:
self.open_excel_with_project_path()
self.action_operate.setEnabled(True)
......@@ -352,6 +366,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.player.setMedia(QMediaContent(QUrl(video_path))) # 选取视频文件
self.playVideo() # 播放视频
self.action_insert_aside_from_now.setEnabled(True)
def start_detect(self, video_path, book_path):
"""检测旁白
......@@ -471,6 +486,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.statusbarLabel.setText(" %s完成" % (type))
self.progressBar.setValue(100)
self.progressLabel.setText(f"100%")
self.projectContext.nd_process = 1
for t in self.threads:
if t.exitcode != 0:
print("Exception in", t.getName())
......@@ -663,21 +679,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.videoFullScreenWidget.setFullScreen(1)
self.videoFullScreen = True
# def open_excel(self):
# file_info = QFileDialog.getOpenFileNames(
# self, '选择表格路径', os.getcwd(), "All Files(*);;Text Files(*.txt)")
# file_path, ok = validate_and_get_filepath(file_info)
# # path = QFileDialog.getOpenFileUrl()
# print("表格路径:", file_path)
# if ok == False:
# return
# self.projectContext.setExcelPath(file_path)
# self.projectContext.load_excel_from_path()
# self.all_tableWidget_idx = 0
# self.pb_tableWidget_idx = 0
# self.zm_tableWidget_idx = 0
# self.set_table_to_window()
def open_excel_with_project_path(self):
self.projectContext.load_excel_from_path()
self.all_tableWidget_idx = 0
......@@ -1044,12 +1045,24 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def change_table_select_rows(self):
cur_time = self.player.position() / 1000
all_elements = self.projectContext.all_elements
aside_list = self.projectContext.aside_list
for i in range(len(all_elements) - 1, -1, -1):
if utils.trans_to_seconds(all_elements[i].st_time_sec) <= cur_time:
self.all_tableWidget.selectRow(i)
break
if self.curTab == 0:
all_elements = self.projectContext.all_elements
for i in range(len(all_elements) - 1, -1, -1):
if utils.trans_to_seconds(all_elements[i].st_time_sec) <= cur_time:
self.all_tableWidget.selectRow(i)
break
elif self.curTab == 1:
subtitle_list = self.projectContext.subtitle_list
for i in range(len(subtitle_list) - 1, -1, -1):
if utils.trans_to_seconds(subtitle_list[i].st_time_sec) <= cur_time:
self.zm_tableWidget.selectRow(i)
break
else:
aside_list = self.projectContext.aside_list
for i in range(len(aside_list) - 1, -1, -1):
if utils.trans_to_seconds(aside_list[i].st_time_sec) <= cur_time:
self.pb_tableWidget.selectRow(i)
break
def player_change_slot(self, new_duration: int):
# 在【打开工程】操作的时候,设置sld_video的最大值为电影秒数。
......@@ -1122,6 +1135,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# 只需要改all_elements就可以了,因为是同一对象
def mod_line_operation_slot(self, row, start_time, end_time, subtitle, suggest, aside, speed):
# 保留原来的element
to_be_modify_element = copy.deepcopy(self.projectContext.all_elements[int(row) - 1])
# 更新element
elem = self.projectContext.all_elements[int(row)-1]
elem.st_time_sec = start_time
elem.ed_time_sec = end_time
......@@ -1130,21 +1147,23 @@ class MainWindow(QMainWindow, Ui_MainWindow):
elem.aside = aside
elem.speed = speed
to_be_modify_element = self.projectContext.all_elements[int(row) - 1]
if suggest is not None and "插入旁白,推荐字数为" in suggest:
for i in range(len(self.projectContext.aside_list)):
if to_be_modify_element.equalTo(self.projectContext.aside_list[i]):
self.pb_tableWidget_idx =i
self.setElememtToTable(self.pb_tableWidget, self.projectContext.aside_list[i], i)
print(i)
self.pb_tableWidget_idx = i
# 更新
self.setElememtToTable(self.pb_tableWidget, elem, i)
self.do_generate_audio_by_aside_row(i)
break
else:
for i in range(len(self.projectContext.subtitle_header)):
for i in range(len(self.projectContext.subtitle_list)):
if to_be_modify_element.equalTo(self.projectContext.subtitle_list[i]):
self.zm_tableWidget_idx = i
self.setElememtToTable(self.zm_tableWidget, self.projectContext.subtitle_list[i], i)
self.setElememtToTable(self.zm_tableWidget, elem, i)
break
self.setElememtToTable(self.all_tableWidget, self.projectContext.all_elements[int(row)-1], int(row)-1)
self.setElememtToTable(self.all_tableWidget, elem, int(row)-1)
self.projectContext.save_project()
self.prompt_dialog.show_with_msg("操作成功!!请查看变化")
......@@ -1194,4 +1213,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
if col not in constant.Content.ActivateColumns:
return
print("已经set user_editing_content=True")
self.user_editing_content = True
\ No newline at end of file
self.user_editing_content = True
def getTabId(self, x):
self.curTab = int(x)
\ No newline at end of file
......@@ -338,10 +338,10 @@ class Ui_MainWindow(object):
self.action_undo.setObjectName("action_undo")
self.action_redo = QtWidgets.QAction(MainWindow)
self.action_redo.setObjectName("action_redo")
self.actiona_3 = QtWidgets.QAction(MainWindow)
self.actiona_3.setObjectName("actiona_3")
self.actiona_4 = QtWidgets.QAction(MainWindow)
self.actiona_4.setObjectName("actiona_4")
self.action_3 = QtWidgets.QAction(MainWindow)
self.action_3.setObjectName("action_3")
self.action_4 = QtWidgets.QAction(MainWindow)
self.action_4.setObjectName("action_4")
self.action_view_history = QtWidgets.QAction(MainWindow)
self.action_view_history.setObjectName("action_view_history")
# self.action_refresh_tab = QtWidgets.QAction(MainWindow)
......@@ -371,8 +371,8 @@ class Ui_MainWindow(object):
self.menu_2.addAction(self.action_insert_aside_from_now)
self.menu_2.addAction(self.action_operate)
# self.menu_2.addAction(self.action_insert_subtitle_from_now)
self.menu_3.addAction(self.actiona_3)
self.menu_3.addAction(self.actiona_4)
self.menu_3.addAction(self.action_3)
self.menu_3.addAction(self.action_4)
# self.menu_3.addSeparator()
# self.menu_3.addAction(self.action_refresh_tab)
self.menubar.addAction(self.menu.menuAction())
......@@ -409,8 +409,8 @@ class Ui_MainWindow(object):
self.action_redo.setText(_translate("MainWindow", "重做"))
self.action_insert_aside_from_now.setText(_translate("MainWindow", "当前位置插入旁白"))
self.action_operate.setText(_translate("MainWindow", "操作表格"))
self.actiona_3.setText(_translate("MainWindow", "旁白区间检测"))
self.actiona_4.setText(_translate("MainWindow", "旁白音频合成"))
self.action_3.setText(_translate("MainWindow", "旁白区间检测"))
self.action_4.setText(_translate("MainWindow", "旁白音频合成"))
self.action_view_history.setText(_translate("MainWindow", "----"))
# self.action_refresh_tab.setText(_translate("MainWindow", "刷新且保存表格"))
self.action_export.setText(_translate("MainWindow", "导出"))
......
......@@ -106,7 +106,7 @@ class Element:
"subtitle:",self.subtitle,"suggest:",self.suggest, "aside:", self.aside, "speed:", self.speed)
def equalTo(self, other)->bool:
return abs(float(self.st_time_sec) - float(other.st_time_sec)) < 0.1
return self.st_time_sec == other.st_time_sec
class ProjectContext:
def __init__(self):
......
......@@ -151,7 +151,6 @@ class Operation_Dialog(QDialog, Ui_Dialog):
self.comboBox_2.setEnabled(status)
def start_operation_slot(self):
row, start_time, end_time, subtitle, suggest, aside = [
x.text() for x in self.lineEdits]
speed = self.comboBox_3.currentText()
......
......@@ -168,7 +168,7 @@ class Ui_Dialog(object):
self.label_5.setText(_translate("Dialog", "字幕:"))
self.label_10.setText(_translate("Dialog", "*请填文字"))
self.label_6.setText(_translate("Dialog", "推荐字数:"))
self.label_12.setText(_translate("Dialog", "*请填数字,必须是不超过100的正整数"))
self.label_12.setText(_translate("Dialog", "*请填数字"))
self.label_7.setText(_translate("Dialog", "旁白:"))
self.label_11.setText(_translate("Dialog", "*请填文字"))
self.label_14.setText(_translate("Dialog", "语速:"))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment