优化SA打标界面代码格式,修复缩进和空行问题,增强可读性
This commit is contained in:
@ -696,7 +696,6 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
|
|
||||||
self.ui.label_sampno.setText(f"编号:{sampID}")
|
self.ui.label_sampno.setText(f"编号:{sampID}")
|
||||||
|
|
||||||
|
|
||||||
# 初始化画框
|
# 初始化画框
|
||||||
self.fig = plt.figure(figsize=(12, 9), dpi=100)
|
self.fig = plt.figure(figsize=(12, 9), dpi=100)
|
||||||
self.canvas = FigureCanvasQTAgg(self.fig)
|
self.canvas = FigureCanvasQTAgg(self.fig)
|
||||||
@ -707,7 +706,6 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
self.figToolbar.cid_mouse_move = self.canvas.mpl_connect('motion_notify_event', self.on_motion)
|
self.figToolbar.cid_mouse_move = self.canvas.mpl_connect('motion_notify_event', self.on_motion)
|
||||||
self.figToolbar.cid_wheel = self.canvas.mpl_connect('scroll_event', self.__slot_wheel_move__)
|
self.figToolbar.cid_wheel = self.canvas.mpl_connect('scroll_event', self.__slot_wheel_move__)
|
||||||
|
|
||||||
|
|
||||||
self.ui.verticalLayout_canvas.addWidget(self.canvas)
|
self.ui.verticalLayout_canvas.addWidget(self.canvas)
|
||||||
self.ui.verticalLayout_canvas.addWidget(self.figToolbar)
|
self.ui.verticalLayout_canvas.addWidget(self.figToolbar)
|
||||||
|
|
||||||
@ -798,6 +796,7 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
self.ui.pushButton_next_half.clicked.connect(self.__slot_btn_move__)
|
self.ui.pushButton_next_half.clicked.connect(self.__slot_btn_move__)
|
||||||
self.ui.pushButton_jump_to.clicked.connect(self.__slot_btn_move__)
|
self.ui.pushButton_jump_to.clicked.connect(self.__slot_btn_move__)
|
||||||
self.ui.pushButton_confirmLabel.clicked.connect(self.__slot_btn_confirmLabel__)
|
self.ui.pushButton_confirmLabel.clicked.connect(self.__slot_btn_confirmLabel__)
|
||||||
|
self.ui.pushButton_reset_event.clicked.connect(self.__reset_event__)
|
||||||
|
|
||||||
# 输入防抖
|
# 输入防抖
|
||||||
self.debounce_timer1 = QTimer()
|
self.debounce_timer1 = QTimer()
|
||||||
@ -846,20 +845,18 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
self.ui.pushButton_best_fit.setShortcut(
|
self.ui.pushButton_best_fit.setShortcut(
|
||||||
QCoreApplication.translate("MainWindow", Params.SA_LABEL_BTN_BEST_FIT_SHORTCUT_KEY))
|
QCoreApplication.translate("MainWindow", Params.SA_LABEL_BTN_BEST_FIT_SHORTCUT_KEY))
|
||||||
self.ui.pushButton_quick_remark_input_littleChange.setShortcut(
|
self.ui.pushButton_quick_remark_input_littleChange.setShortcut(
|
||||||
QCoreApplication.translate("MainWindow", Params. SA_LABEL_BTN_LITTLE_CHANGED_SHORTCUT_KEY)
|
QCoreApplication.translate("MainWindow", Params.SA_LABEL_BTN_LITTLE_CHANGED_SHORTCUT_KEY)
|
||||||
)
|
)
|
||||||
self.ui.pushButton_quick_remark_input_changeOnMiddle.setShortcut(
|
self.ui.pushButton_quick_remark_input_changeOnMiddle.setShortcut(
|
||||||
QCoreApplication.translate("MainWindow", Params. SA_LABEL_BTN_CHANGED_ON_MIDDLE_SHORTCUT_KEY)
|
QCoreApplication.translate("MainWindow", Params.SA_LABEL_BTN_CHANGED_ON_MIDDLE_SHORTCUT_KEY)
|
||||||
)
|
)
|
||||||
self.ui.pushButton_quick_remark_input_noNormalRespBetweenArtifact.setShortcut(
|
self.ui.pushButton_quick_remark_input_noNormalRespBetweenArtifact.setShortcut(
|
||||||
).setShortcut(
|
QCoreApplication.translate("MainWindow", Params.SA_LABEL_BTN_BETWEEN_ARTIFACT_SHORTCUT_KEY)
|
||||||
QCoreApplication.translate("MainWindow", Params. SA_LABEL_BTN_BETWEEN_ARTIFACT_SHORTCUT_KEY)
|
|
||||||
)
|
)
|
||||||
self.ui.pushButton_quick_remark_input_lowSignalNoiseRatio.setShortcut(
|
self.ui.pushButton_quick_remark_input_lowSignalNoiseRatio.setShortcut(
|
||||||
QCoreApplication.translate("MainWindow", Params. SA_LABEL_BTN_LOW_SNR_SHORTCUT_KEY)
|
QCoreApplication.translate("MainWindow", Params.SA_LABEL_BTN_LOW_SNR_SHORTCUT_KEY)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def load_data_to_table(self):
|
def load_data_to_table(self):
|
||||||
try:
|
try:
|
||||||
self.data_model_origin = DataFrameModel(self.data.df_origin, self.display_columns_origin,
|
self.data_model_origin = DataFrameModel(self.data.df_origin, self.display_columns_origin,
|
||||||
@ -932,16 +929,19 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
keep_xlim = False
|
keep_xlim = False
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
print(index, event_index)
|
# print(index, event_index)
|
||||||
|
|
||||||
# 表格移动到指定行
|
# 表格移动到指定行
|
||||||
row_list = self.data_model_revised._showdata[self.data_model_revised._showdata["Index"] == event_index].index.tolist()
|
row_list = self.data_model_revised._showdata[
|
||||||
|
self.data_model_revised._showdata["Index"] == event_index].index.tolist()
|
||||||
if row_list:
|
if row_list:
|
||||||
row = row_list[0]
|
row = row_list[0]
|
||||||
model_index = self.data_model_revised.index(row, 0)
|
model_index = self.data_model_revised.index(row, 0)
|
||||||
self.ui.tableView_label_revised.scrollTo(model_index, self.ui.tableView_label_revised.ScrollHint.PositionAtCenter)
|
self.ui.tableView_label_revised.scrollTo(model_index,
|
||||||
|
self.ui.tableView_label_revised.ScrollHint.PositionAtCenter)
|
||||||
# 显示事件信息
|
# 显示事件信息
|
||||||
row_list = self.data_model_origin._showdata[self.data_model_origin._showdata["Index"] == event_index].index.tolist()
|
row_list = self.data_model_origin._showdata[
|
||||||
|
self.data_model_origin._showdata["Index"] == event_index].index.tolist()
|
||||||
if row_list:
|
if row_list:
|
||||||
row = row_list[0]
|
row = row_list[0]
|
||||||
|
|
||||||
@ -1171,15 +1171,14 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
|
|
||||||
# 点击了空白区域
|
# 点击了空白区域
|
||||||
elif event_row is None:
|
elif event_row is None:
|
||||||
self.selected_event_rect.set_alpha(0.2)
|
self.__reset_rect__()
|
||||||
self.selected_event_info = None
|
self.selected_event_info = None
|
||||||
self.selected_event_rect = None
|
self.selected_event_rect = None
|
||||||
self.__clear_event_info__()
|
self.__clear_event_info__()
|
||||||
|
|
||||||
elif self.selected_event_info["Index"] != event_row["Index"]:
|
elif self.selected_event_info["Index"] != event_row["Index"]:
|
||||||
# TODO 弹窗提醒是否切换
|
# TODO 弹窗提醒是否切换
|
||||||
if self.selected_event_rect is not None:
|
self.__reset_rect__()
|
||||||
self.selected_event_rect.set_alpha(0.2)
|
|
||||||
self.selected_event_info = event_row.copy()
|
self.selected_event_info = event_row.copy()
|
||||||
self.selected_event_rect = self.event_ploy_collection[self.selected_event_info["Index"]]
|
self.selected_event_rect = self.event_ploy_collection[self.selected_event_info["Index"]]
|
||||||
self.selected_event_rect.set_alpha(0.4)
|
self.selected_event_rect.set_alpha(0.4)
|
||||||
@ -1223,6 +1222,21 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
self.canvas.setCursor(QCursor(Qt.CursorShape.ArrowCursor))
|
self.canvas.setCursor(QCursor(Qt.CursorShape.ArrowCursor))
|
||||||
self.canvas.draw_idle()
|
self.canvas.draw_idle()
|
||||||
|
|
||||||
|
def __reset_rect__(self):
|
||||||
|
if self.selected_event_info is not None and self.selected_event_rect is not None:
|
||||||
|
self.selected_event_rect.set_alpha(0.2)
|
||||||
|
x_rect = self.selected_event_rect.get_x()
|
||||||
|
width = self.selected_event_rect.get_width()
|
||||||
|
|
||||||
|
event_left = self.selected_event_info["correct_Start"] if self.selected_event_info["isLabeled"] != -1 else \
|
||||||
|
self.selected_event_info["Start"]
|
||||||
|
event_right = self.selected_event_info["correct_End"] if self.selected_event_info["isLabeled"] != -1 else \
|
||||||
|
self.selected_event_info["End"]
|
||||||
|
if x_rect != event_left or width != (event_right - event_left):
|
||||||
|
self.selected_event_rect.set_x(event_left)
|
||||||
|
self.selected_event_rect.set_width(event_right - event_left)
|
||||||
|
self.canvas.draw_idle()
|
||||||
|
|
||||||
@overrides
|
@overrides
|
||||||
def closeEvent(self, event):
|
def closeEvent(self, event):
|
||||||
reply = QMessageBox.question(self, '确认', '确认退出吗?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
|
reply = QMessageBox.question(self, '确认', '确认退出吗?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
|
||||||
@ -1260,7 +1274,6 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
else:
|
else:
|
||||||
event.ignore()
|
event.ignore()
|
||||||
|
|
||||||
|
|
||||||
def __save_revise_df__(self):
|
def __save_revise_df__(self):
|
||||||
try:
|
try:
|
||||||
# 过滤掉Index大于origin的行中score为3的行
|
# 过滤掉Index大于origin的行中score为3的行
|
||||||
@ -1597,19 +1610,22 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
self.event_ploy_collection[new_event["Index"]] = self.selected_event_rect
|
self.event_ploy_collection[new_event["Index"]] = self.selected_event_rect
|
||||||
self.show_selected_event(int(new_event["Index"]))
|
self.show_selected_event(int(new_event["Index"]))
|
||||||
|
|
||||||
def reset_event(self, event_index):
|
def __reset_event__(self):
|
||||||
"""
|
"""
|
||||||
从df_origin中重置事件信息到df_revised, df_origin只有df_revised的部分列,剩余的列恢复默认值
|
从df_origin中重置事件信息到df_revised, df_origin只有df_revised的部分列,剩余的列恢复默认值
|
||||||
"""
|
"""
|
||||||
if self.data is None or self.data.df_revised is None:
|
if self.data is None or self.data.df_revised is None:
|
||||||
raise ValueError("Data or df_revised is not initialized.")
|
raise ValueError("Data or df_revised is not initialized.")
|
||||||
|
|
||||||
index = self.data.df_revised[self.data.df_revised["Index"] == event_index].index
|
event_index = self.selected_event_info["Index"]
|
||||||
if index < 1 or index > len(self.data.df_revised):
|
|
||||||
raise IndexError("Index out of bounds for df_revised.")
|
if event_index < 1 or event_index > len(self.data.df_origin):
|
||||||
|
PublicFunc.msgbox_output(self, "只能重置原始事件,无法重置新建事件!", Constants.MSGBOX_TYPE_WARNING)
|
||||||
|
PublicFunc.text_output(self.ui, "只能重置原始事件,无法重置新建事件!", Constants.TIPS_TYPE_ERROR)
|
||||||
|
return
|
||||||
|
|
||||||
# 获取原始事件信息
|
# 获取原始事件信息
|
||||||
original_event_info = self.data.df_origin[self.data.df_origin["Index"] == index].copy()
|
original_event_info = self.data.df_origin[self.data.df_origin["Index"] == event_index].copy()
|
||||||
original_event_info["isLabeled"] = -1 # 重置为未标记状态
|
original_event_info["isLabeled"] = -1 # 重置为未标记状态
|
||||||
original_event_info["correct_EventsType"] = "" # 重置为None
|
original_event_info["correct_EventsType"] = "" # 重置为None
|
||||||
original_event_info["score"] = -1 # 重置为None
|
original_event_info["score"] = -1 # 重置为None
|
||||||
@ -1617,23 +1633,42 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
original_event_info["correct_End"] = -1 # 重置为原始终止时间
|
original_event_info["correct_End"] = -1 # 重置为原始终止时间
|
||||||
original_event_info["remark"] = "" # 重置备注为None
|
original_event_info["remark"] = "" # 重置备注为None
|
||||||
# 检查是否有重叠
|
# 检查是否有重叠
|
||||||
if sum(self.data.event_index_revised[
|
# 检查是否已有事件重叠
|
||||||
max(0, original_event_info["Start"] - 1):min(original_event_info["End"] + 1,
|
|
||||||
self.config["SignalSecond"])]) != original_event_info[
|
overlapping_indices = set(self.data.event_index_revised[
|
||||||
"Index"]:
|
max(0, original_event_info["Start"].values[0] - 1):min(
|
||||||
|
original_event_info["End"].values[0] + 1,
|
||||||
|
self.config["SignalSecond"])])
|
||||||
|
overlapping_indices.discard(event_index) # 去除自身
|
||||||
|
overlapping_indices.discard(0) # 去除空白区域标记
|
||||||
|
if len(overlapping_indices) > 0:
|
||||||
PublicFunc.msgbox_output(self, "重置事件与已有事件重叠,无法重置!", Constants.MSGBOX_TYPE_WARNING)
|
PublicFunc.msgbox_output(self, "重置事件与已有事件重叠,无法重置!", Constants.MSGBOX_TYPE_WARNING)
|
||||||
PublicFunc.text_output(self.ui, "重置事件与已有事件重叠,无法重置!", Constants.TIPS_TYPE_ERROR)
|
PublicFunc.text_output(self.ui, "重置事件与已有事件重叠,无法重置!", Constants.TIPS_TYPE_ERROR)
|
||||||
return
|
return
|
||||||
|
|
||||||
# 更新事件索引映射
|
# 更新事件索引映射
|
||||||
self.data.event_index_revised[original_event_info["Start"]:original_event_info["End"]] = original_event_info[
|
# 先去除原始事件索引映射
|
||||||
"Index"]
|
self.data.event_index_revised[self.data.event_index_revised == event_index] = 0
|
||||||
|
# 再添加新的事件索引映射
|
||||||
|
self.data.event_index_revised[original_event_info["Start"].values[0]:original_event_info["End"].values[0]] = event_index
|
||||||
|
|
||||||
# 重置事件信息到df_revised
|
# 重置事件信息到df_revised
|
||||||
self.data.df_revised[self.data.df_revised["Index"] == index] = original_event_info
|
self.data.df_revised[self.data.df_revised["Index"] == event_index] = original_event_info
|
||||||
|
|
||||||
self.data_model_revised.update_all(self.data.df_revised)
|
self.data_model_revised.update_all(self.data.df_revised)
|
||||||
|
|
||||||
|
# 更新rect
|
||||||
|
if event_index in self.event_ploy_collection:
|
||||||
|
if self.event_ploy_collection[event_index] is not None:
|
||||||
|
self.event_ploy_collection[event_index].remove()
|
||||||
|
|
||||||
|
color = self.color_cycle[self.data.event_type_to_value[original_event_info["Event type"].values[0]]]
|
||||||
|
self.selected_event_rect = self.ax5.axvspan(original_event_info["Start"].values[0],
|
||||||
|
original_event_info["End"].values[0], color=color,
|
||||||
|
alpha=0.4)
|
||||||
|
self.event_ploy_collection[event_index] = self.selected_event_rect
|
||||||
|
self.canvas.draw_idle()
|
||||||
|
|
||||||
def __slot_btn_input__(self):
|
def __slot_btn_input__(self):
|
||||||
PublicFunc.__disableAllButton__(self, ButtonState)
|
PublicFunc.__disableAllButton__(self, ButtonState)
|
||||||
|
|
||||||
@ -1786,7 +1821,6 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
PublicFunc.text_output(self.ui, f"滚轮移动 {offset} 秒", Constants.TIPS_TYPE_INFO)
|
PublicFunc.text_output(self.ui, f"滚轮移动 {offset} 秒", Constants.TIPS_TYPE_INFO)
|
||||||
self.__jump_to__by_time__(self.config["WindowStartSecond"], offset)
|
self.__jump_to__by_time__(self.config["WindowStartSecond"], offset)
|
||||||
|
|
||||||
|
|
||||||
def __slot_btn_quick_remark__(self):
|
def __slot_btn_quick_remark__(self):
|
||||||
sender = self.sender()
|
sender = self.sender()
|
||||||
|
|
||||||
@ -1970,7 +2004,6 @@ class CustomNavigationToolbar(NavigationToolbar2QT):
|
|||||||
self._actions['pan'].setShortcut(
|
self._actions['pan'].setShortcut(
|
||||||
QCoreApplication.translate("MainWindow", Params.SA_LABEL_BTN_PAN_MODE_SHORTCUT_KEY))
|
QCoreApplication.translate("MainWindow", Params.SA_LABEL_BTN_PAN_MODE_SHORTCUT_KEY))
|
||||||
|
|
||||||
|
|
||||||
def drag_pan(self, event):
|
def drag_pan(self, event):
|
||||||
"""Callback for dragging in pan/zoom mode."""
|
"""Callback for dragging in pan/zoom mode."""
|
||||||
for ax in self._pan_info.axes:
|
for ax in self._pan_info.axes:
|
||||||
|
|||||||
Reference in New Issue
Block a user