1、修复了其他几个模块的Permission Denied时无法正确提示的问题

2、为这些模块重新添加了手动保存的功能,当内容尚未成功保存到磁盘时,内容将暂存到内存中,正确操作后手动点击手动保存将能正确保存结果
This commit is contained in:
2025-06-04 20:12:28 +08:00
parent 65f8bef694
commit 56149d47e9
14 changed files with 256 additions and 47 deletions

View File

@ -41,6 +41,7 @@ ButtonState = {
"pushButton_quick_remark_input_noNormalRespBetweenArtifact": False,
"pushButton_quick_remark_input_lowSignalNoiseRatio": False,
"pushButton_quick_remark_input_changeOnMiddle": False,
"pushButton_save": False,
"pushButton_prev": False,
"pushButton_next": False,
"pushButton_confirmLabel": False,
@ -62,6 +63,7 @@ ButtonState = {
"pushButton_quick_remark_input_noNormalRespBetweenArtifact": False,
"pushButton_quick_remark_input_lowSignalNoiseRatio": False,
"pushButton_quick_remark_input_changeOnMiddle": False,
"pushButton_save": False,
"pushButton_prev": False,
"pushButton_next": False,
"pushButton_confirmLabel": False,
@ -752,6 +754,7 @@ class MainWindow_SA_label(QMainWindow):
ButtonState["Current"]["pushButton_quick_remark_input_noNormalRespBetweenArtifact"] = True
ButtonState["Current"]["pushButton_quick_remark_input_lowSignalNoiseRatio"] = True
ButtonState["Current"]["pushButton_quick_remark_input_changeOnMiddle"] = True
ButtonState["Current"]["pushButton_save"] = True
ButtonState["Current"]["pushButton_prev"] = True
ButtonState["Current"]["pushButton_next"] = True
ButtonState["Current"]["pushButton_confirmLabel"] = True

View File

@ -9,7 +9,7 @@ from PySide6.QtWidgets import QMessageBox, QMainWindow, QApplication, QTableWidg
from matplotlib import gridspec, patches
from matplotlib.backends.backend_qt import NavigationToolbar2QT
from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg
from numpy import array, append, sum as np_sum, nonzero
from numpy import array, sum as np_sum, nonzero
from numpy.fft import fft, fftfreq
from overrides import overrides
from pandas import read_csv, DataFrame, concat
@ -33,6 +33,7 @@ ButtonState = {
"Default": {
"pushButton_input_setting": True,
"pushButton_input": True,
"pushButton_save": False,
"pushButton_prev_move": False,
"pushButton_pause": False,
"pushButton_next_move": False,
@ -46,6 +47,7 @@ ButtonState = {
"Current": {
"pushButton_input_setting": True,
"pushButton_input": True,
"pushButton_save": False,
"pushButton_prev_move": False,
"pushButton_pause": False,
"pushButton_next_move": False,
@ -270,6 +272,7 @@ class MainWindow_artifact_label(QMainWindow):
self.ui.pushButton_type_4.clicked.connect(self.__slot_btn_label__)
self.ui.pushButton_type_5.clicked.connect(self.__slot_btn_label__)
self.ui.pushButton_delete.clicked.connect(self.__slot_btn_delete_label__)
self.ui.pushButton_save.clicked.connect(self.__slot_btn_save__)
self.ui.pushButton_prev_move.clicked.connect(self.__slot_btn_move__)
self.ui.pushButton_pause.clicked.connect(self.__slot_btn_move__)
self.ui.pushButton_next_move.clicked.connect(self.__slot_btn_move__)
@ -644,6 +647,7 @@ class MainWindow_artifact_label(QMainWindow):
ButtonState["Current"]["pushButton_input_setting"] = False
ButtonState["Current"]["pushButton_prev_move"] = True
ButtonState["Current"]["pushButton_next_move"] = True
ButtonState["Current"]["pushButton_save"] = True
ButtonState["Current"]["pushButton_pause"] = True
ButtonState["Current"]["pushButton_type_1"] = True
ButtonState["Current"]["pushButton_type_2"] = True
@ -652,9 +656,25 @@ class MainWindow_artifact_label(QMainWindow):
ButtonState["Current"]["pushButton_type_5"] = True
PublicFunc.finish_operation(self, ButtonState)
def __slot_btn_save__(self):
PublicFunc.__disableAllButton__(self, ButtonState)
# 保存
PublicFunc.progressbar_update(self, 1, 1, Constants.SAVING_DATA, 0)
result = self.save()
if not result.status:
PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
else:
PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_INFO)
PublicFunc.msgbox_output(self, result.info, Constants.TIPS_TYPE_INFO)
PublicFunc.finish_operation(self, ButtonState)
def __slot_btn_label__(self):
sender = self.sender()
flag = False
select_row = []
select_type = array([0, 0, 0, 0, 0])
flagf = False
@ -853,14 +873,15 @@ class MainWindow_artifact_label(QMainWindow):
result = self.data.save(amount, duration)
if not result.status:
PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
info = f"未成功保存,错误提示:{result.info},结果已暂存到缓存中,请正确操作后重试。"
PublicFunc.text_output(self.ui, info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR)
else:
PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_INFO)
info = result.info
PublicFunc.text_output(self.ui, info, Constants.TIPS_TYPE_INFO)
PublicFunc.finish_operation(self, ButtonState)
return result
def __slot_btn_delete_label__(self):
if self.pressed_number is not None:

View File

@ -228,6 +228,7 @@ class MainWindow_bcg_quality_label(QMainWindow):
self.ui.pushButton_input_setting.clicked.connect(self.setting.show)
self.ui.pushButton_input.clicked.connect(self.__slot_btn_input__)
self.ui.pushButton_save.clicked.connect(self.__slot_btn_save__)
self.ui.pushButton_prev.clicked.connect(self.__slot_btn_move__)
self.ui.pushButton_next.clicked.connect(self.__slot_btn_move__)
self.ui.tableWidget_a1.cellDoubleClicked.connect(self.__slot_tablewidget_on_cell_double_clicked__)
@ -483,6 +484,23 @@ class MainWindow_bcg_quality_label(QMainWindow):
PublicFunc.finish_operation(self, ButtonState)
def __slot_btn_save__(self):
PublicFunc.__disableAllButton__(self, ButtonState)
# 保存
PublicFunc.progressbar_update(self, 1, 1, Constants.SAVING_DATA, 0)
result = result = self.data.save("手动保存")
if not result.status:
PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
else:
PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_INFO)
PublicFunc.msgbox_output(self, result.info, Constants.TIPS_TYPE_INFO)
PublicFunc.finish_operation(self, ButtonState)
def __slot_btn_move__(self):
sender = self.sender()
@ -654,12 +672,13 @@ class MainWindow_bcg_quality_label(QMainWindow):
self.update_tableWidget()
result = self.data.save(label)
if not result.status:
PublicFunc.text_output(self.ui, result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
info = f"未成功保存,错误提示:{result.info},结果已暂存到缓存中,请正确操作后重试。"
PublicFunc.text_output(self.ui, info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR)
else:
PublicFunc.text_output(self.ui, result.info, Constants.TIPS_TYPE_INFO)
info = result.info
PublicFunc.text_output(self.ui, info, Constants.TIPS_TYPE_INFO)
PublicFunc.finish_operation(self, ButtonState)
def __slot_btn_invalid_signal_label__(self):
reply = QMessageBox.question(self, Constants.QUESTION_TITLE,
@ -677,12 +696,13 @@ class MainWindow_bcg_quality_label(QMainWindow):
self.update_tableWidget()
result = self.data.save("无效信号标注")
if not result.status:
PublicFunc.text_output(self.ui, result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
info = f"未成功保存,错误提示:{result.info},结果已暂存到缓存中,请正确操作后重试。"
PublicFunc.text_output(self.ui, info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR)
else:
PublicFunc.text_output(self.ui, result.info, Constants.TIPS_TYPE_INFO)
info = result.info
PublicFunc.text_output(self.ui, info, Constants.TIPS_TYPE_INFO)
PublicFunc.finish_operation(self, ButtonState)
def __slot_btn_Ctype_signal_label__(self):
reply = QMessageBox.question(self, Constants.QUESTION_TITLE,
@ -700,12 +720,13 @@ class MainWindow_bcg_quality_label(QMainWindow):
self.update_tableWidget()
result = self.data.save("C类信号标注")
if not result.status:
PublicFunc.text_output(self.ui, result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
info = f"未成功保存,错误提示:{result.info},结果已暂存到缓存中,请正确操作后重试。"
PublicFunc.text_output(self.ui, info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR)
else:
PublicFunc.text_output(self.ui, result.info, Constants.TIPS_TYPE_INFO)
info = result.info
PublicFunc.text_output(self.ui, info, Constants.TIPS_TYPE_INFO)
PublicFunc.finish_operation(self, ButtonState)
def __slot_checkBox_highlight_longest_continuous__(self):
self.__plot__()

View File

@ -33,6 +33,7 @@ ButtonState = {
"Default": {
"pushButton_input_setting": True,
"pushButton_input": True,
"pushButton_save": False,
"pushButton_prev_move": False,
"pushButton_pause": False,
"pushButton_next_move": False
@ -40,6 +41,7 @@ ButtonState = {
"Current": {
"pushButton_input_setting": True,
"pushButton_input": True,
"pushButton_save": False,
"pushButton_prev_move": False,
"pushButton_pause": False,
"pushButton_next_move": False
@ -306,6 +308,7 @@ class MainWindow_label_check(QMainWindow):
self.ui.pushButton_input.clicked.connect(self.__slot_btn_input__)
self.ui.pushButton_input_setting.clicked.connect(self.setting.show)
self.ui.pushButton_save.clicked.connect(self.__slot_btn_save__)
self.ui.pushButton_prev_move.clicked.connect(self.__slot_btn_move__)
self.ui.pushButton_pause.clicked.connect(self.__slot_btn_move__)
self.ui.pushButton_next_move.clicked.connect(self.__slot_btn_move__)
@ -547,11 +550,29 @@ class MainWindow_label_check(QMainWindow):
action.setEnabled(True)
ButtonState["Current"]["pushButton_input"] = False
ButtonState["Current"]["pushButton_input_setting"] = False
ButtonState["Current"]["pushButton_save"] = True
ButtonState["Current"]["pushButton_prev_move"] = True
ButtonState["Current"]["pushButton_next_move"] = True
ButtonState["Current"]["pushButton_pause"] = True
PublicFunc.finish_operation(self, ButtonState)
def __slot_btn_save__(self):
PublicFunc.__disableAllButton__(self, ButtonState)
# 保存
PublicFunc.progressbar_update(self, 1, 1, Constants.SAVING_DATA, 0)
result = self.data.save()
if not result.status:
PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
else:
PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_INFO)
PublicFunc.msgbox_output(self, result.info, Constants.TIPS_TYPE_INFO)
PublicFunc.finish_operation(self, ButtonState)
def __slot_btn_move__(self):
if self.data is None:
return
@ -825,12 +846,13 @@ class MainWindow_label_check(QMainWindow):
self.__update_tableWidget_and_info__()
result = self.data.save()
if not result.status:
PublicFunc.text_output(self.ui, result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
info = f"未成功保存,错误提示:{result.info},结果已暂存到缓存中,请正确操作后重试。"
PublicFunc.text_output(self.ui, info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR)
else:
PublicFunc.text_output(self.ui, result.info, Constants.TIPS_TYPE_INFO)
info = result.info
PublicFunc.text_output(self.ui, info, Constants.TIPS_TYPE_INFO)
# 移除矩形patch
if self.figToolbar.rect_patch_ax0 is not None and self.figToolbar.rect_patch_ax1 is not None:
self.figToolbar.rect_patch_ax0.remove()

View File

@ -43,7 +43,8 @@ ButtonState = {
"pushButton_invalid": False,
"pushButton_reset": False,
"pushButton_prev": False,
"pushButton_next": False
"pushButton_next": False,
"pushButton_save": False
},
"Current": {
"pushButton_input_setting": True,
@ -57,7 +58,8 @@ ButtonState = {
"pushButton_invalid": False,
"pushButton_reset": False,
"pushButton_prev": False,
"pushButton_next": False
"pushButton_next": False,
"pushButton_save": False
}
}
@ -276,6 +278,7 @@ class MainWindow_resp_quality_label(QMainWindow):
self.ui.pushButton_input_and_label.clicked.connect(self.__slot_btn_input_and_label__)
self.ui.pushButton_autoqualitylabel_recalculate.clicked.connect(self.__slot_btn_autoqualitylabel_recalculate__)
self.ui.pushButton_refilter_orgBcg.clicked.connect(self.__slot_btn_refilter_orgBcg__)
self.ui.pushButton_save.clicked.connect(self.__slot_btn_save__)
self.ui.pushButton_prev.clicked.connect(self.__slot_btn_move__)
self.ui.pushButton_next.clicked.connect(self.__slot_btn_move__)
self.ui.tableWidget_labeled.cellDoubleClicked.connect(self.__slot_tableWidget_on_cell_double_clicked__)
@ -573,6 +576,7 @@ class MainWindow_resp_quality_label(QMainWindow):
ButtonState["Current"]["pushButton_reset"] = False
ButtonState["Current"]["pushButton_prev"] = False
ButtonState["Current"]["pushButton_next"] = False
ButtonState["Current"]["pushButton_save"] = False
for action in self.figToolbar._actions.values():
action.setEnabled(True)
self.figToolbar.action_Label_Multiple.setEnabled(False)
@ -619,6 +623,7 @@ class MainWindow_resp_quality_label(QMainWindow):
ButtonState["Current"]["pushButton_reset"] = False
ButtonState["Current"]["pushButton_prev"] = False
ButtonState["Current"]["pushButton_next"] = False
ButtonState["Current"]["pushButton_save"] = False
PublicFunc.finish_operation(self, ButtonState)
@ -740,6 +745,7 @@ class MainWindow_resp_quality_label(QMainWindow):
ButtonState["Current"]["pushButton_reset"] = True
ButtonState["Current"]["pushButton_prev"] = True
ButtonState["Current"]["pushButton_next"] = True
ButtonState["Current"]["pushButton_save"] = True
for action in self.figToolbar._actions.values():
action.setEnabled(True)
for action in self.figToolbar_spectrum._actions.values():
@ -824,6 +830,35 @@ class MainWindow_resp_quality_label(QMainWindow):
PublicFunc.finish_operation(self, ButtonState)
def __slot_btn_save__(self):
PublicFunc.__disableAllButton__(self, ButtonState)
# 保存
PublicFunc.progressbar_update(self, 1, 2, Constants.SAVING_DATA, 0)
result = self.data.save_resp_quality_label()
if not result.status:
PublicFunc.text_output(self.ui, "(1/2)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
else:
PublicFunc.text_output(self.ui, "(1/2)" + result.info, Constants.TIPS_TYPE_INFO)
# 保存
PublicFunc.progressbar_update(self, 2, 2, Constants.SAVING_DATA, 50)
result = self.data.save_tho_peak()
if not result.status:
PublicFunc.text_output(self.ui, "(2/2)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
else:
PublicFunc.text_output(self.ui, "(2/2)" + result.info, Constants.TIPS_TYPE_INFO)
info = f"{Filename.RESP_QUALITY_LABEL}{Filename.THO_PEAK}保存成功"
PublicFunc.msgbox_output(self, info, Constants.TIPS_TYPE_INFO)
PublicFunc.finish_operation(self, ButtonState)
def __slot_btn_move__(self):
sender = self.sender()
@ -944,6 +979,12 @@ class MainWindow_resp_quality_label(QMainWindow):
self.data.resp_quality_label[Config["CurrentPartNum"] - 1] = -1
else:
raise ValueError("发射信号不存在")
PublicFunc.text_output(self.ui, str(Config["CurrentPartNum"]) +
Constants.RESP_QUALITY_LABEL_LABEL_SUCCESSFULLY +
"" + Constants.RESP_QUALITY_LABEL_LABEL_TYPE +
Constants.RESP_QUALITY_LABEL_KEY_VALUE[
self.data.resp_quality_label[Config["CurrentPartNum"] - 1]],
Constants.TIPS_TYPE_INFO)
result = self.data.save_resp_quality_label()
self.update_tableWidget()
if not result.status:
@ -953,11 +994,6 @@ class MainWindow_resp_quality_label(QMainWindow):
return
else:
PublicFunc.text_output(self.ui, result.info, Constants.TIPS_TYPE_INFO)
PublicFunc.text_output(self.ui, str(Config["CurrentPartNum"]) +
Constants.RESP_QUALITY_LABEL_LABEL_SUCCESSFULLY +
"" + Constants.RESP_QUALITY_LABEL_LABEL_TYPE +
Constants.RESP_QUALITY_LABEL_KEY_VALUE[self.data.resp_quality_label[Config["CurrentPartNum"] - 1]],
Constants.TIPS_TYPE_INFO)
def __slot_lineEdit_filter__(self, filter_text):
sender = self.sender()
@ -1212,12 +1248,12 @@ class MainWindow_resp_quality_label(QMainWindow):
result = self.data.save_tho_peak()
if not result.status:
PublicFunc.text_output(self.ui, result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
info = f"未成功保存,错误提示:{result.info},结果已暂存到缓存中,请正确操作后重试。"
PublicFunc.text_output(self.ui, info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR)
else:
PublicFunc.text_output(self.ui, result.info, Constants.TIPS_TYPE_INFO)
info = result.info
PublicFunc.text_output(self.ui, info, Constants.TIPS_TYPE_INFO)
# 移除矩形patch
if self.figToolbar.rect_patch_ax1 is not None:

View File

@ -158,8 +158,8 @@ class Params:
"Freq": 1000
},
"Filter": {
"BandPassLow": 2,
"BandPassHigh": 15
"BandPassLow": 1,
"BandPassHigh": 25
},
"PeaksValue": 200,
"DetectMethod": ""