Commit dcd386d9 authored by xuanweiace's avatar xuanweiace

fix:对于连续两段[旁白段]的导入错误的问题

fix:对于双击无法跳转的问题 fix:对于保存工程虽然启用了异步但是依旧过慢的问题
parent 41a6db21
......@@ -59,7 +59,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.synthesis_timer.timeout.connect(self.check_if_synthesis_over_slot)
self.video_timer = QTimer()
self.video_timer.timeout.connect(self.change_videotime_label_slot)
self.video_timer.start(100)
self.video_timer.start(1000) # todo 作为参数配置
"""
状态栏相关空间
"""
......@@ -131,6 +131,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# 表格双击和发生change时的处理
self.zm_tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.all_tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.pb_tableWidget.itemDoubleClicked.connect(self.writeHistory)
self.pb_tableWidget.itemChanged.connect(self.rewriteHistory)
self.pb_tableWidget.itemChanged.connect(self.write2ProjectFromAside)
......@@ -143,6 +144,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# self.all_tableWidget.itemChanged.connect(self.rewriteHistoryFromContent)
# self.all_tableWidget.itemChanged.connect(self.write2ProjectFromContent)
# 其他变量
#在进行redo_undo时,会触发itemchange,但是这时候不能覆写历史。但是需要写入project。(注意命名思路:在进行redo的时候,会有两步操作,写入history和写入project。我们只希望他不写入history,所以命名中要带有history)
......@@ -153,12 +157,22 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# 重写关闭Mmainwindow窗口
def closeEvent(self, event):
replp = QtWidgets.QMessageBox.question(self, u'警告', u'确认退出?',
# buttonBox = QtWidgets.QMessageBox()
# btn_save_and_close = buttonBox.addButton("保存并退出", QtWidgets.QMessageBox.YesRole)
# btn_not_save_and_close = buttonBox.addButton("不保存并退出", QtWidgets.QMessageBox.YesRole)
# buttonBox.exec_()
replp = QtWidgets.QMessageBox().question(self, u'警告', u'是否保存新的修改到Excel?',
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
if replp == QtWidgets.QMessageBox.Yes:
event.accept()
else:
event.ignore()
self.projectContext.save_project(False)
event.accept()
print("emit close Event")
# 重写改变窗口大小事件
def resizeEvent(self, *args, **kwargs):
super().resizeEvent(*args, **kwargs)
position = self.kd_slider.value()
self.scale_change_slot(position)
def show_detect_dialog(self):
self.detect_dialog.show()
def show_assemble_dialog(self):
......@@ -314,10 +328,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
"""
刻度相关
期望效果:
期望效果:在最左刻度时,恰好打满【时间轴区】,当最右刻度时,时间轴上每一刻度对应的时间是1s.
"""
def emit_scale_change_slot(self):
position = self.kd_slider.value()
self.scale_change_slot(position)
def scale_change_slot(self, position):
if self.player.duration() == 0:
return
area_width = self.scrollArea.width()
......@@ -544,10 +562,13 @@ class MainWindow(QMainWindow, Ui_MainWindow):
print("row, col = %s, %s"%(row, col))
text = item.text() # 获取内容
if self.checkIfVideoTimeCanChange(row, col):
self.video_timer.stop()
self.video_timer.start(1000) # 双击的时候,就重启计时器,避免他跳转回video.position的地方去。
self.player.setPosition(int(float(text)*1000))
def checkIfVideoTimeCanChange(self, row, col):
if col == constant.Aside.StartTimeColumn:
return True
......@@ -721,10 +742,12 @@ class MainWindow(QMainWindow, Ui_MainWindow):
print("=="*10)
def change_videotime_label_slot(self):
# print("in [change_videotime_label_slot]")
if self.player.duration() > 0: # 开始播放后才执行
self.change_videotime_label()
self.change_table_select_rows()
def change_videotime_label(self):
position = self.player.position()/1000
duration = self.player.duration()/1000
......
......@@ -362,7 +362,7 @@ QPushButton:pressed {
<property name="widgetResizable">
<bool>false</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<widget class="myWidgetContents" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
......@@ -614,6 +614,12 @@ QPushButton:pressed {
<extends>QSlider</extends>
<header>myvideoslider.h</header>
</customwidget>
<customwidget>
<class>myWidgetContents</class>
<extends>QWidget</extends>
<header>mywidgetcontents.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
......
......@@ -207,7 +207,7 @@ class Ui_MainWindow(object):
self.scrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
self.scrollArea.setWidgetResizable(False)
self.scrollArea.setObjectName("scrollArea")
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents = myWidgetContents()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 827, 64))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.sld_video = myVideoSlider(self.scrollAreaWidgetContents)
......@@ -356,3 +356,4 @@ class Ui_MainWindow(object):
from myVideoWidget import myVideoWidget
from myvideoslider import myVideoSlider
from mywidgetcontents import myWidgetContents
This diff is collapsed.
......@@ -175,6 +175,9 @@ class ProjectContext:
def save_project(self, need_save_new: bool=False) -> str:
# all_element = sorted(all_element, key=lambda x: float(x.st_time_sec))
print("current excel_path:", self.excel_path)
if self.excel_path == None:
return "保存路径为空"
if need_save_new:
new_excel_path = replace_path_suffix(self.excel_path, datetime.datetime.now().strftime('%Y%m%d%H%M%S')+'.xlsx')
err_info = save_excel_to_to_path(self.all_elements, new_excel_path, self.header, self.excel_sheet_name)
......@@ -199,6 +202,7 @@ class ProjectContext:
def load_project(self):
pass
# todo: 其实现在ed_time_sec基本没有用到,所以可以忽略不计。
def load_excel_from_path(self):
d = read_sheet(self.excel_path)
self.clear()
......@@ -213,7 +217,13 @@ class ProjectContext:
if i == 0:
st_time_sec = "0.01"
else:
st_time_sec = "%.2f"%(float(d["终止时间"][i-1])+0.01)
try:
st_time_sec = "%.2f"%(float(d["终止时间"][i-1])+0.01)
except Exception as e:
# 如果是两端连续旁白,那是没有终止时间的,需要做微调,这里是直接用上一条旁白的起始时间。
st_time_sec = "%.2f"%(float(d["起始时间"][i-1])+0.01)
# 如果是最后一条
if i == len(d["字幕"])-1:
ed_time_sec = "360000" # todo 默认最大时长是100h
else:
......@@ -295,9 +305,9 @@ def save_excel_to_to_path(all_element, new_excel_path, header, excel_sheet_name)
try:
create_sheet(new_excel_path, "旁白插入位置建议", [header])
for element in all_element:
# element.print_self()
write_to_sheet(new_excel_path, excel_sheet_name, element.to_list())
# for element in all_element:
# write_to_sheet(new_excel_path, excel_sheet_name, element.to_list())
write_to_sheet(new_excel_path, excel_sheet_name, all_element)
except:
exception_info = ''.join(
traceback.format_exception(*sys.exc_info()))
......@@ -311,10 +321,10 @@ def save_excel_to_to_path(all_element, new_excel_path, header, excel_sheet_name)
t = RunThread(funcName=save_excel_thread,
args=(all_element, new_excel_path, header, excel_sheet_name),
name="save_excel")
t.setDaemon(True)
# t.setDaemon(True)
t.start()
def write_to_sheet(path: str, sheet_name: str, value: list):
def write_to_sheet(path: str, sheet_name: str, valuelist: list):
"""向已存在的表格中写入一行数据
Args:
......@@ -322,18 +332,22 @@ def write_to_sheet(path: str, sheet_name: str, value: list):
sheet_name (str): excel表内的表(sheet)的名字
value (list): 要插入表内的一行数据
"""
index = len(value)
# 把None换成空串
value = ["" if x == None else x for x in value]
workbook = openpyxl.load_workbook(path)
sheet = workbook.get_sheet_by_name(sheet_name)
cur_row = sheet.max_row
for j in range(0, index):
sheet.cell(row=cur_row + 1, column=j + 1, value=str(value[j]))
if value[j] == '' or '插入旁白' in str(value[j]):
sheet.cell(row=cur_row + 1, column=j + 1).fill = PatternFill(fill_type='solid', fgColor='ffff00')
if j == 2:
sheet.cell(row=cur_row + 1, column=j + 1).alignment = Alignment(wrapText=True)
for value_element in valuelist:
value = value_element.to_list()
index = len(value)
# 把None换成空串
value = ["" if x == None else x for x in value]
cur_row = sheet.max_row
# print("cur_row:", cur_row)
for j in range(0, index):
sheet.cell(row=cur_row + 1, column=j + 1, value=str(value[j]))
if value[j] == '' or '插入旁白' in str(value[j]):
sheet.cell(row=cur_row + 1, column=j + 1).fill = PatternFill(fill_type='solid', fgColor='ffff00')
if j == 2:
sheet.cell(row=cur_row + 1, column=j + 1).alignment = Alignment(wrapText=True)
workbook.save(path)
......
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QWidget
# 不需要他了
class myWidgetContents(QWidget):
# resize_signal = pyqtSignal() # 创建双击信号
def __init__(self, parent=None):
super(QWidget, self).__init__(parent)
# def changeEvent(self, QEvent):
# print("触发了changeEvent")
# super().changeEvent(QEvent)
# self.resize_signal.emit()
# def moveEvent(self, QMoveEvent):
# print("触发了moveEvent")
# super().moveEvent(QMoveEvent)
# self.resize_signal.emit()
\ No newline at end of file
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