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 ...@@ -25,6 +25,8 @@ from myvideoslider import myVideoSlider
from main_window_ui import Ui_MainWindow from main_window_ui import Ui_MainWindow
import time import time
import constant import constant
import copy
import sys
class MainWindow(QMainWindow, Ui_MainWindow): class MainWindow(QMainWindow, Ui_MainWindow):
...@@ -92,15 +94,6 @@ 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 = QLabel()
self.statusbarLabel.setText(" 休息中") self.statusbarLabel.setText(" 休息中")
...@@ -112,13 +105,22 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -112,13 +105,22 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.progressBar.setValue(0) self.progressBar.setValue(0)
# 进度条的进度 # 进度条的进度
self.progressLabel = QLabel("0.00%") 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.setting.triggered.connect(self.show_setting_dialog) # 设置
self.actiona_3.triggered.connect(self.show_detect_dialog) self.action_3.triggered.connect(self.show_detect_dialog)
self.actiona_4.triggered.connect(self.show_assemble_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_create.triggered.connect(self.show_create_dialog) # 新建工程
self.action_save.triggered.connect(self.save_project) self.action_save.triggered.connect(self.save_project)
self.action_save.setEnabled(False)
self.import_movie.triggered.connect(self.import_slot) self.import_movie.triggered.connect(self.import_slot)
self.import_movie.setEnabled(False) self.import_movie.setEnabled(False)
self.action_open_project.triggered.connect(self.open_project_slot) self.action_open_project.triggered.connect(self.open_project_slot)
...@@ -136,11 +138,9 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -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.triggered.connect(self.insert_aside_from_now_slot)
self.action_insert_aside_from_now.setEnabled(False) 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 self.video_duration = None
...@@ -167,7 +167,12 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -167,7 +167,12 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.sld_audio.valueChanged.connect(self.volumeChange) # 控制声音播放 self.sld_audio.valueChanged.connect(self.volumeChange) # 控制声音播放
self.kd_slider.valueChanged.connect(self.scale_change_slot) self.kd_slider.valueChanged.connect(self.scale_change_slot)
"""
表格相关信息
"""
self.curTab = 0
# 设置表格每一列的宽度 # 设置表格每一列的宽度
self.tabWidget.currentChanged.connect(self.getTabId)
subtitle_header = self.projectContext.subtitle_header subtitle_header = self.projectContext.subtitle_header
self.zm_tableWidget.setColumnCount(len(subtitle_header)) self.zm_tableWidget.setColumnCount(len(subtitle_header))
self.zm_tableWidget.setHorizontalHeaderLabels(subtitle_header) self.zm_tableWidget.setHorizontalHeaderLabels(subtitle_header)
...@@ -261,6 +266,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -261,6 +266,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.projectContext.save_project(False) self.projectContext.save_project(False)
event.accept() event.accept()
print("emit close Event") print("emit close Event")
sys.exit(0)
else: else:
event.ignore() event.ignore()
...@@ -288,23 +294,28 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -288,23 +294,28 @@ class MainWindow(QMainWindow, Ui_MainWindow):
replp = QtWidgets.QMessageBox.question(self, u'警告', msg, replp = QtWidgets.QMessageBox.question(self, u'警告', msg,
QtWidgets.QMessageBox.Yes) QtWidgets.QMessageBox.Yes)
# 新建工程后,初始化界面 # 在已打开一个工程的情况下打开或新建另一个工程,初始化界面
def init_project(self, project_path): def init_project(self, project_path):
# 如果目前界面中正在处理其他工程,需要让用户确认是否退出当前界面 if self.projectContext.project_base_dir is not None:
replp = QtWidgets.QMessageBox.question(self, u'警告', u'是否退出当前工程?', # 如果目前界面中正在处理其他工程,需要让用户确认是否退出当前界面
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No) replp = QtWidgets.QMessageBox.question(self, u'警告', u'是否退出当前工程?',
if replp == QtWidgets.QMessageBox.Yes: QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
self.projectContext.save_project(False) if replp == QtWidgets.QMessageBox.Yes:
print("emit close Event") self.projectContext.save_project(False)
print("emit close Event")
# 把其他进程结束掉
for t in self.all_threads: # 把其他进程结束掉
if t.is_alive(): for t in self.all_threads:
stop_thread(t) if t.is_alive():
# 把project_path传递给start,在mainwindow初始化的时候传参进来 stop_thread(t)
self.renew_signal.emit(project_path) # 把project_path传递给start,在mainwindow初始化的时候传参进来
# 关闭当前窗口,刷新得到一个新窗口 self.renew_signal.emit(project_path)
QApplication.exit(MainWindow.EXIT_CODE_REBOOT) # 关闭当前窗口,刷新得到一个新窗口
QApplication.exit(MainWindow.EXIT_CODE_REBOOT)
else:
# 直接在当前界面刷新
self.projectContext.Init(project_path)
self.update_ui()
# 导入视频 # 导入视频
...@@ -330,13 +341,16 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -330,13 +341,16 @@ class MainWindow(QMainWindow, Ui_MainWindow):
print("[import_slot] project_path=" + project_path) print("[import_slot] project_path=" + project_path)
if project_path == "" or project_path == None: if project_path == "" or project_path == None:
return return
self.projectContext.Init(project_path) self.init_project(project_path)
self.update_ui()
def update_ui(self): def update_ui(self):
if self.projectContext.project_base_dir is None: if self.projectContext.project_base_dir is None:
return return
self.action_export.setEnabled(True) 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: if self.projectContext.excel_path is not None:
self.open_excel_with_project_path() self.open_excel_with_project_path()
self.action_operate.setEnabled(True) self.action_operate.setEnabled(True)
...@@ -352,6 +366,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -352,6 +366,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.player.setMedia(QMediaContent(QUrl(video_path))) # 选取视频文件 self.player.setMedia(QMediaContent(QUrl(video_path))) # 选取视频文件
self.playVideo() # 播放视频 self.playVideo() # 播放视频
self.action_insert_aside_from_now.setEnabled(True) self.action_insert_aside_from_now.setEnabled(True)
def start_detect(self, video_path, book_path): def start_detect(self, video_path, book_path):
"""检测旁白 """检测旁白
...@@ -471,6 +486,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -471,6 +486,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.statusbarLabel.setText(" %s完成" % (type)) self.statusbarLabel.setText(" %s完成" % (type))
self.progressBar.setValue(100) self.progressBar.setValue(100)
self.progressLabel.setText(f"100%") self.progressLabel.setText(f"100%")
self.projectContext.nd_process = 1
for t in self.threads: for t in self.threads:
if t.exitcode != 0: if t.exitcode != 0:
print("Exception in", t.getName()) print("Exception in", t.getName())
...@@ -663,21 +679,6 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -663,21 +679,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.videoFullScreenWidget.setFullScreen(1) self.videoFullScreenWidget.setFullScreen(1)
self.videoFullScreen = True 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): def open_excel_with_project_path(self):
self.projectContext.load_excel_from_path() self.projectContext.load_excel_from_path()
self.all_tableWidget_idx = 0 self.all_tableWidget_idx = 0
...@@ -1044,12 +1045,24 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -1044,12 +1045,24 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def change_table_select_rows(self): def change_table_select_rows(self):
cur_time = self.player.position() / 1000 cur_time = self.player.position() / 1000
all_elements = self.projectContext.all_elements if self.curTab == 0:
aside_list = self.projectContext.aside_list all_elements = self.projectContext.all_elements
for i in range(len(all_elements) - 1, -1, -1): for i in range(len(all_elements) - 1, -1, -1):
if utils.trans_to_seconds(all_elements[i].st_time_sec) <= cur_time: if utils.trans_to_seconds(all_elements[i].st_time_sec) <= cur_time:
self.all_tableWidget.selectRow(i) self.all_tableWidget.selectRow(i)
break 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): def player_change_slot(self, new_duration: int):
# 在【打开工程】操作的时候,设置sld_video的最大值为电影秒数。 # 在【打开工程】操作的时候,设置sld_video的最大值为电影秒数。
...@@ -1122,6 +1135,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -1122,6 +1135,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# 只需要改all_elements就可以了,因为是同一对象 # 只需要改all_elements就可以了,因为是同一对象
def mod_line_operation_slot(self, row, start_time, end_time, subtitle, suggest, aside, speed): 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 = self.projectContext.all_elements[int(row)-1]
elem.st_time_sec = start_time elem.st_time_sec = start_time
elem.ed_time_sec = end_time elem.ed_time_sec = end_time
...@@ -1130,21 +1147,23 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -1130,21 +1147,23 @@ class MainWindow(QMainWindow, Ui_MainWindow):
elem.aside = aside elem.aside = aside
elem.speed = speed elem.speed = speed
to_be_modify_element = self.projectContext.all_elements[int(row) - 1]
if suggest is not None and "插入旁白,推荐字数为" in suggest: if suggest is not None and "插入旁白,推荐字数为" in suggest:
for i in range(len(self.projectContext.aside_list)): for i in range(len(self.projectContext.aside_list)):
if to_be_modify_element.equalTo(self.projectContext.aside_list[i]): if to_be_modify_element.equalTo(self.projectContext.aside_list[i]):
self.pb_tableWidget_idx =i print(i)
self.setElememtToTable(self.pb_tableWidget, self.projectContext.aside_list[i], i) self.pb_tableWidget_idx = i
# 更新
self.setElememtToTable(self.pb_tableWidget, elem, i)
self.do_generate_audio_by_aside_row(i) self.do_generate_audio_by_aside_row(i)
break break
else: 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]): if to_be_modify_element.equalTo(self.projectContext.subtitle_list[i]):
self.zm_tableWidget_idx = 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 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.projectContext.save_project()
self.prompt_dialog.show_with_msg("操作成功!!请查看变化") self.prompt_dialog.show_with_msg("操作成功!!请查看变化")
...@@ -1194,4 +1213,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): ...@@ -1194,4 +1213,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
if col not in constant.Content.ActivateColumns: if col not in constant.Content.ActivateColumns:
return return
print("已经set user_editing_content=True") print("已经set user_editing_content=True")
self.user_editing_content = True self.user_editing_content = True
\ No newline at end of file
def getTabId(self, x):
self.curTab = int(x)
\ No newline at end of file
...@@ -338,10 +338,10 @@ class Ui_MainWindow(object): ...@@ -338,10 +338,10 @@ class Ui_MainWindow(object):
self.action_undo.setObjectName("action_undo") self.action_undo.setObjectName("action_undo")
self.action_redo = QtWidgets.QAction(MainWindow) self.action_redo = QtWidgets.QAction(MainWindow)
self.action_redo.setObjectName("action_redo") self.action_redo.setObjectName("action_redo")
self.actiona_3 = QtWidgets.QAction(MainWindow) self.action_3 = QtWidgets.QAction(MainWindow)
self.actiona_3.setObjectName("actiona_3") self.action_3.setObjectName("action_3")
self.actiona_4 = QtWidgets.QAction(MainWindow) self.action_4 = QtWidgets.QAction(MainWindow)
self.actiona_4.setObjectName("actiona_4") self.action_4.setObjectName("action_4")
self.action_view_history = QtWidgets.QAction(MainWindow) self.action_view_history = QtWidgets.QAction(MainWindow)
self.action_view_history.setObjectName("action_view_history") self.action_view_history.setObjectName("action_view_history")
# self.action_refresh_tab = QtWidgets.QAction(MainWindow) # self.action_refresh_tab = QtWidgets.QAction(MainWindow)
...@@ -371,8 +371,8 @@ class Ui_MainWindow(object): ...@@ -371,8 +371,8 @@ class Ui_MainWindow(object):
self.menu_2.addAction(self.action_insert_aside_from_now) self.menu_2.addAction(self.action_insert_aside_from_now)
self.menu_2.addAction(self.action_operate) self.menu_2.addAction(self.action_operate)
# self.menu_2.addAction(self.action_insert_subtitle_from_now) # self.menu_2.addAction(self.action_insert_subtitle_from_now)
self.menu_3.addAction(self.actiona_3) self.menu_3.addAction(self.action_3)
self.menu_3.addAction(self.actiona_4) self.menu_3.addAction(self.action_4)
# self.menu_3.addSeparator() # self.menu_3.addSeparator()
# self.menu_3.addAction(self.action_refresh_tab) # self.menu_3.addAction(self.action_refresh_tab)
self.menubar.addAction(self.menu.menuAction()) self.menubar.addAction(self.menu.menuAction())
...@@ -409,8 +409,8 @@ class Ui_MainWindow(object): ...@@ -409,8 +409,8 @@ class Ui_MainWindow(object):
self.action_redo.setText(_translate("MainWindow", "重做")) self.action_redo.setText(_translate("MainWindow", "重做"))
self.action_insert_aside_from_now.setText(_translate("MainWindow", "当前位置插入旁白")) self.action_insert_aside_from_now.setText(_translate("MainWindow", "当前位置插入旁白"))
self.action_operate.setText(_translate("MainWindow", "操作表格")) self.action_operate.setText(_translate("MainWindow", "操作表格"))
self.actiona_3.setText(_translate("MainWindow", "旁白区间检测")) self.action_3.setText(_translate("MainWindow", "旁白区间检测"))
self.actiona_4.setText(_translate("MainWindow", "旁白音频合成")) self.action_4.setText(_translate("MainWindow", "旁白音频合成"))
self.action_view_history.setText(_translate("MainWindow", "----")) self.action_view_history.setText(_translate("MainWindow", "----"))
# self.action_refresh_tab.setText(_translate("MainWindow", "刷新且保存表格")) # self.action_refresh_tab.setText(_translate("MainWindow", "刷新且保存表格"))
self.action_export.setText(_translate("MainWindow", "导出")) self.action_export.setText(_translate("MainWindow", "导出"))
......
...@@ -106,7 +106,7 @@ class Element: ...@@ -106,7 +106,7 @@ class Element:
"subtitle:",self.subtitle,"suggest:",self.suggest, "aside:", self.aside, "speed:", self.speed) "subtitle:",self.subtitle,"suggest:",self.suggest, "aside:", self.aside, "speed:", self.speed)
def equalTo(self, other)->bool: 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: class ProjectContext:
def __init__(self): def __init__(self):
......
...@@ -151,7 +151,6 @@ class Operation_Dialog(QDialog, Ui_Dialog): ...@@ -151,7 +151,6 @@ class Operation_Dialog(QDialog, Ui_Dialog):
self.comboBox_2.setEnabled(status) self.comboBox_2.setEnabled(status)
def start_operation_slot(self): def start_operation_slot(self):
row, start_time, end_time, subtitle, suggest, aside = [ row, start_time, end_time, subtitle, suggest, aside = [
x.text() for x in self.lineEdits] x.text() for x in self.lineEdits]
speed = self.comboBox_3.currentText() speed = self.comboBox_3.currentText()
......
...@@ -168,7 +168,7 @@ class Ui_Dialog(object): ...@@ -168,7 +168,7 @@ class Ui_Dialog(object):
self.label_5.setText(_translate("Dialog", "字幕:")) self.label_5.setText(_translate("Dialog", "字幕:"))
self.label_10.setText(_translate("Dialog", "*请填文字")) self.label_10.setText(_translate("Dialog", "*请填文字"))
self.label_6.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_7.setText(_translate("Dialog", "旁白:"))
self.label_11.setText(_translate("Dialog", "*请填文字")) self.label_11.setText(_translate("Dialog", "*请填文字"))
self.label_14.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