From 10247fb73881e76adb4ff34f3c0321f691c66b92 Mon Sep 17 00:00:00 2001 From: Yorusora Date: Mon, 5 May 2025 20:43:22 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E7=B2=BE=E7=AE=80=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=85=AC=E5=85=B1=E4=BB=A3=E7=A0=81=E5=88=B0PublicFunc.py?= =?UTF-8?q?=E4=B8=AD=202=E3=80=81=E5=AE=8C=E6=88=90=E4=BA=86<=E4=BA=BA?= =?UTF-8?q?=E5=B7=A5=E7=BA=A0=E6=AD=A3>=E7=9A=84=E9=83=A8=E5=88=86?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- func/Module_detect_Jpeak.py | 100 ++----- func/Module_detect_Rpeak.py | 100 ++----- func/Module_label_check.py | 348 ++++++++++++++++++++++++ func/Module_mainwindow.py | 33 ++- func/Module_preprocess.py | 112 +++----- func/utils/ConfigParams.py | 30 ++ func/utils/Constants.py | 26 +- func/utils/PublicFunc.py | 63 ++++- ui/MainWindow/MainWindow_label_check.py | 123 +++++---- ui/MainWindow/MainWindow_label_check.ui | 23 +- ui/setting/label_check_input_setting.py | 54 ++-- ui/setting/label_check_input_setting.ui | 4 +- 12 files changed, 686 insertions(+), 330 deletions(-) create mode 100644 func/Module_label_check.py diff --git a/func/Module_detect_Jpeak.py b/func/Module_detect_Jpeak.py index 76a13b4..405523c 100644 --- a/func/Module_detect_Jpeak.py +++ b/func/Module_detect_Jpeak.py @@ -2,7 +2,7 @@ from gc import collect from pathlib import Path import matplotlib.pyplot as plt -from PySide6.QtWidgets import QMessageBox, QMainWindow, QWidget, QPushButton, QProgressBar, QApplication +from PySide6.QtWidgets import QMessageBox, QMainWindow, QApplication from matplotlib import gridspec from matplotlib.backends.backend_qt import NavigationToolbar2QT from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg @@ -135,7 +135,7 @@ class MainWindow_detect_Jpeak(QMainWindow): # 初始化进度条 self.progressbar = None - self.add_progressbar() + PublicFunc.add_progressbar(self) #初始化画框 self.fig = None @@ -175,7 +175,7 @@ class MainWindow_detect_Jpeak(QMainWindow): self.ax0.grid(True) self.ax0.xaxis.set_major_formatter(ConfigParams.FORMATTER) - self.__resetAllButton__() + PublicFunc.__resetAllButton__(self, ButtonState) self.ui.doubleSpinBox_bandPassLow.setValue(Config["Filter"]["BandPassLow"]) self.ui.doubleSpinBox_bandPassHigh.setValue(Config["Filter"]["BandPassHigh"]) @@ -201,9 +201,9 @@ class MainWindow_detect_Jpeak(QMainWindow): @overrides def closeEvent(self, event): - self.__disableAllButton__() + PublicFunc.__disableAllButton__(self, ButtonState) - self.statusbar_show_msg(PublicFunc.format_status_msg(Constants.SHUTTING_DOWN)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg(Constants.SHUTTING_DOWN)) QApplication.processEvents() # 清空画框 @@ -262,36 +262,6 @@ class MainWindow_detect_Jpeak(QMainWindow): self.canvas.draw() return status, info - def __disableAllButton__(self): - # 禁用所有按钮 - all_widgets = self.centralWidget().findChildren(QWidget) - - # 迭代所有部件,查找按钮并禁用它们 - for widget in all_widgets: - if isinstance(widget, QPushButton): - if widget.objectName() in ButtonState["Current"].keys(): - widget.setEnabled(False) - - def __enableAllButton__(self): - # 启用按钮 - all_widgets = self.centralWidget().findChildren(QWidget) - - # 迭代所有部件,查找按钮并启用它们 - for widget in all_widgets: - if isinstance(widget, QPushButton): - if widget.objectName() in ButtonState["Current"].keys(): - widget.setEnabled(ButtonState["Current"][widget.objectName()]) - - def __resetAllButton__(self): - # 启用按钮 - all_widgets = self.centralWidget().findChildren(QWidget) - - # 迭代所有部件,查找按钮并启用它们 - for widget in all_widgets: - if isinstance(widget, QPushButton): - if widget.objectName() in ButtonState["Default"].keys(): - widget.setEnabled(ButtonState["Default"][widget.objectName()]) - def __update_config__(self): Config["Filter"]["BandPassLow"] = self.ui.doubleSpinBox_bandPassLow.value() @@ -303,33 +273,9 @@ class MainWindow_detect_Jpeak(QMainWindow): Config["UseCPU"] = self.ui.checkBox_useCPU.isChecked() Config["DetectMethod"] = self.ui.comboBox_model.currentText() - def finish_operation(self): - - self.statusbar_show_msg(PublicFunc.format_status_msg(Constants.OPERATION_FINISHED)) - self.progressbar.setValue(100) - QApplication.processEvents() - - self.__enableAllButton__() - - def add_progressbar(self): - - self.progressbar = QProgressBar() - self.progressbar.setRange(0, 100) - self.progressbar.setValue(0) - self.progressbar.setStyleSheet(Constants.PROGRESSBAR_STYLE) - self.ui.statusbar.addPermanentWidget(self.progressbar) - - def statusbar_show_msg(self, msg): - - self.ui.statusbar.showMessage(msg) - - def statusbar_clear_msg(self): - - self.ui.statusbar.clearMessage() - def __slot_btn_input__(self): - self.__disableAllButton__() + PublicFunc.__disableAllButton__(self, ButtonState) # 清空画框 if self.line_data and self.point_peak and self.line_interval: @@ -344,7 +290,7 @@ class MainWindow_detect_Jpeak(QMainWindow): # 清空模型列表 self.ui.comboBox_model.clear() - self.statusbar_show_msg(PublicFunc.format_status_msg("(1/2)" + Constants.DETECT_JPEAK_LOADING_MODEL)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(1/2)" + Constants.DETECT_JPEAK_LOADING_MODEL)) self.progressbar.setValue(0) QApplication.processEvents() @@ -354,13 +300,13 @@ class MainWindow_detect_Jpeak(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(1/2)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(1/2)" + info, Constants.TIPS_TYPE_INFO) self.update_ui_comboBox_model(self.model.model_list) - self.statusbar_show_msg(PublicFunc.format_status_msg("(2/2)" + Constants.INPUTTING_DATA)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(2/2)" + Constants.INPUTTING_DATA)) self.progressbar.setValue(10) QApplication.processEvents() @@ -370,19 +316,19 @@ class MainWindow_detect_Jpeak(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(2/2)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(2/2)" + info, Constants.TIPS_TYPE_INFO) MainWindow_detect_Jpeak.__reset__() - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) def __slot_btn_view__(self): - self.__disableAllButton__() + PublicFunc.__disableAllButton__(self, ButtonState) - self.statusbar_show_msg(PublicFunc.format_status_msg("(1/3)" + Constants.DETECT_JPEAK_PROCESSING_DATA)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(1/3)" + Constants.DETECT_JPEAK_PROCESSING_DATA)) self.progressbar.setValue(0) QApplication.processEvents() @@ -391,12 +337,12 @@ class MainWindow_detect_Jpeak(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(1/3)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(1/3)" + info, Constants.TIPS_TYPE_INFO) - self.statusbar_show_msg(PublicFunc.format_status_msg("(2/3)" + Constants.DETECT_JPEAK_PREDICTING_PEAK)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(2/3)" + Constants.DETECT_JPEAK_PREDICTING_PEAK)) self.progressbar.setValue(10) QApplication.processEvents() @@ -406,7 +352,7 @@ class MainWindow_detect_Jpeak(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(2/3)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(2/3)" + info, Constants.TIPS_TYPE_INFO) @@ -418,7 +364,7 @@ class MainWindow_detect_Jpeak(QMainWindow): PublicFunc.text_output(self.ui, Constants.DETECT_JPEAK_PEAK_AMOUNT + str(len(self.data.peak)), Constants.TIPS_TYPE_INFO) - self.statusbar_show_msg(PublicFunc.format_status_msg("(3/3)" + Constants.DRAWING_DATA)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(3/3)" + Constants.DRAWING_DATA)) self.progressbar.setValue(70) QApplication.processEvents() @@ -427,13 +373,13 @@ class MainWindow_detect_Jpeak(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(3/3)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(3/3)" + info, Constants.TIPS_TYPE_INFO) ButtonState["Current"]["pushButton_save"] = True - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) def __slot_btn_save__(self): @@ -442,9 +388,9 @@ class MainWindow_detect_Jpeak(QMainWindow): QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) if reply == QMessageBox.Yes: - self.__disableAllButton__() + PublicFunc.__disableAllButton__(self, ButtonState) - self.statusbar_show_msg(PublicFunc.format_status_msg("(1/1)" + Constants.SAVING_DATA)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(1/1)" + Constants.SAVING_DATA)) self.progressbar.setValue(0) QApplication.processEvents() @@ -464,13 +410,13 @@ class MainWindow_detect_Jpeak(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(1/1)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(1/1)" + info, Constants.TIPS_TYPE_INFO) PublicFunc.msgbox_output(self, info, Constants.TIPS_TYPE_INFO) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) def update_ui_comboBox_model(self, model_list): diff --git a/func/Module_detect_Rpeak.py b/func/Module_detect_Rpeak.py index d349ce9..772159e 100644 --- a/func/Module_detect_Rpeak.py +++ b/func/Module_detect_Rpeak.py @@ -2,7 +2,7 @@ from gc import collect from pathlib import Path import matplotlib.pyplot as plt -from PySide6.QtWidgets import QMessageBox, QMainWindow, QWidget, QPushButton, QProgressBar, QApplication +from PySide6.QtWidgets import QMessageBox, QMainWindow, QApplication from matplotlib import gridspec from matplotlib.backends.backend_qt import NavigationToolbar2QT from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg @@ -132,7 +132,7 @@ class MainWindow_detect_Rpeak(QMainWindow): # 初始化进度条 self.progressbar = None - self.add_progressbar() + PublicFunc.add_progressbar(self) #初始化画框 self.fig = None @@ -178,7 +178,7 @@ class MainWindow_detect_Rpeak(QMainWindow): self.ax1.grid(True) self.ax1.xaxis.set_major_formatter(ConfigParams.FORMATTER) - self.__resetAllButton__() + PublicFunc.__resetAllButton__(self, ButtonState) self.ui.doubleSpinBox_bandPassLow.setValue(Config["Filter"]["BandPassLow"]) self.ui.doubleSpinBox_bandPassHigh.setValue(Config["Filter"]["BandPassHigh"]) @@ -196,9 +196,9 @@ class MainWindow_detect_Rpeak(QMainWindow): @overrides def closeEvent(self, event): - self.__disableAllButton__() + PublicFunc.__disableAllButton__(self, ButtonState) - self.statusbar_show_msg(PublicFunc.format_status_msg(Constants.SHUTTING_DOWN)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg(Constants.SHUTTING_DOWN)) QApplication.processEvents() # 清空画框 @@ -261,36 +261,6 @@ class MainWindow_detect_Rpeak(QMainWindow): self.canvas.draw() return status, info - def __disableAllButton__(self): - # 禁用所有按钮 - all_widgets = self.centralWidget().findChildren(QWidget) - - # 迭代所有部件,查找按钮并禁用它们 - for widget in all_widgets: - if isinstance(widget, QPushButton): - if widget.objectName() in ButtonState["Current"].keys(): - widget.setEnabled(False) - - def __enableAllButton__(self): - # 启用按钮 - all_widgets = self.centralWidget().findChildren(QWidget) - - # 迭代所有部件,查找按钮并启用它们 - for widget in all_widgets: - if isinstance(widget, QPushButton): - if widget.objectName() in ButtonState["Current"].keys(): - widget.setEnabled(ButtonState["Current"][widget.objectName()]) - - def __resetAllButton__(self): - # 启用按钮 - all_widgets = self.centralWidget().findChildren(QWidget) - - # 迭代所有部件,查找按钮并启用它们 - for widget in all_widgets: - if isinstance(widget, QPushButton): - if widget.objectName() in ButtonState["Default"].keys(): - widget.setEnabled(ButtonState["Default"][widget.objectName()]) - def __update_config__(self): Config["Filter"]["BandPassLow"] = self.ui.doubleSpinBox_bandPassLow.value() @@ -298,33 +268,9 @@ class MainWindow_detect_Rpeak(QMainWindow): Config["PeaksValue"] = self.ui.spinBox_peaksValue.value() Config["DetectMethod"] = self.ui.comboBox_method.currentText() - def finish_operation(self): - - self.statusbar_show_msg(PublicFunc.format_status_msg(Constants.OPERATION_FINISHED)) - self.progressbar.setValue(100) - QApplication.processEvents() - - self.__enableAllButton__() - - def add_progressbar(self): - - self.progressbar = QProgressBar() - self.progressbar.setRange(0, 100) - self.progressbar.setValue(0) - self.progressbar.setStyleSheet(Constants.PROGRESSBAR_STYLE) - self.ui.statusbar.addPermanentWidget(self.progressbar) - - def statusbar_show_msg(self, msg): - - self.ui.statusbar.showMessage(msg) - - def statusbar_clear_msg(self): - - self.ui.statusbar.clearMessage() - def __slot_btn_input__(self): - self.__disableAllButton__() + PublicFunc.__disableAllButton__(self, ButtonState) # 清空画框 if self.line_data and self.point_peak and self.line_interval: @@ -339,7 +285,7 @@ class MainWindow_detect_Rpeak(QMainWindow): # 清空方法列表 self.ui.comboBox_method.clear() - self.statusbar_show_msg(PublicFunc.format_status_msg("(1/2)" + Constants.DETECT_RPEAK_LOADING_METHOD)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(1/2)" + Constants.DETECT_RPEAK_LOADING_METHOD)) self.progressbar.setValue(0) QApplication.processEvents() @@ -354,13 +300,13 @@ class MainWindow_detect_Rpeak(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(1/2)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(1/2)" + info, Constants.TIPS_TYPE_INFO) self.update_ui_comboBox_method(method_list) - self.statusbar_show_msg(PublicFunc.format_status_msg("(2/2)" + Constants.INPUTTING_DATA)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(2/2)" + Constants.INPUTTING_DATA)) self.progressbar.setValue(10) QApplication.processEvents() @@ -370,19 +316,19 @@ class MainWindow_detect_Rpeak(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(2/2)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(2/2)" + info, Constants.TIPS_TYPE_INFO) MainWindow_detect_Rpeak.__reset__() - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) def __slot_btn_view__(self): - self.__disableAllButton__() + PublicFunc.__disableAllButton__(self, ButtonState) - self.statusbar_show_msg(PublicFunc.format_status_msg("(1/3)" + Constants.DETECT_RPEAK_PROCESSING_DATA)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(1/3)" + Constants.DETECT_RPEAK_PROCESSING_DATA)) self.progressbar.setValue(0) QApplication.processEvents() @@ -391,12 +337,12 @@ class MainWindow_detect_Rpeak(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(1/3)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(1/3)" + info, Constants.TIPS_TYPE_INFO) - self.statusbar_show_msg(PublicFunc.format_status_msg("(2/3)" + Constants.DETECT_RPEAK_PREDICTING_PEAK)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(2/3)" + Constants.DETECT_RPEAK_PREDICTING_PEAK)) self.progressbar.setValue(10) QApplication.processEvents() @@ -405,7 +351,7 @@ class MainWindow_detect_Rpeak(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(2/3)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(2/3)" + info, Constants.TIPS_TYPE_INFO) @@ -417,7 +363,7 @@ class MainWindow_detect_Rpeak(QMainWindow): PublicFunc.text_output(self.ui, Constants.DETECT_RPEAK_PEAK_AMOUNT + str(len(self.data.peak)), Constants.TIPS_TYPE_INFO) - self.statusbar_show_msg(PublicFunc.format_status_msg("(3/3)" + Constants.DRAWING_DATA)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(3/3)" + Constants.DRAWING_DATA)) self.progressbar.setValue(70) QApplication.processEvents() @@ -426,13 +372,13 @@ class MainWindow_detect_Rpeak(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(3/3)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(3/3)" + info, Constants.TIPS_TYPE_INFO) ButtonState["Current"]["pushButton_save"] = True - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) def __slot_btn_save__(self): @@ -441,9 +387,9 @@ class MainWindow_detect_Rpeak(QMainWindow): QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) if reply == QMessageBox.Yes: - self.__disableAllButton__() + PublicFunc.__disableAllButton__(self, ButtonState) - self.statusbar_show_msg(PublicFunc.format_status_msg("(1/1)" + Constants.SAVING_DATA)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(1/1)" + Constants.SAVING_DATA)) self.progressbar.setValue(0) QApplication.processEvents() @@ -463,13 +409,13 @@ class MainWindow_detect_Rpeak(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(1/1)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(1/1)" + info, Constants.TIPS_TYPE_INFO) PublicFunc.msgbox_output(self, info, Constants.TIPS_TYPE_INFO) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) def update_ui_comboBox_method(self, method_list): diff --git a/func/Module_label_check.py b/func/Module_label_check.py new file mode 100644 index 0000000..50b9047 --- /dev/null +++ b/func/Module_label_check.py @@ -0,0 +1,348 @@ +from gc import collect +from pathlib import Path + +import matplotlib.pyplot as plt +from PySide6.QtWidgets import QMessageBox, QMainWindow, QApplication +from matplotlib import gridspec +from matplotlib.backends.backend_qt import NavigationToolbar2QT +from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg +from overrides import overrides +from pandas import read_csv, DataFrame +from scipy.signal import resample +from yaml import dump, load, FullLoader + +from func.utils.PublicFunc import PublicFunc +from func.utils.Constants import Constants, ConfigParams + +from ui.MainWindow.MainWindow_label_check import Ui_MainWindow_label_check +from ui.setting.label_check_input_setting import Ui_MainWindow_label_check_input_setting + + +Config = { + +} + +ButtonState = { + "Default": { + "pushButton_input_setting": True, + "pushButton_input": True, + "pushButton_prev_move": False, + "pushButton_pause": False, + "pushButton_next_move": False, + "pushButton_save": False + }, + "Current": { + "pushButton_input_setting": True, + "pushButton_input": True, + "pushButton_prev_move": False, + "pushButton_pause": False, + "pushButton_next_move": False, + "pushButton_save": False + } +} + + +class SettingWindow(QMainWindow): + + def __init__(self, mode, root_path, sampID): + + super(SettingWindow, self).__init__() + self.ui = Ui_MainWindow_label_check_input_setting() + self.ui.setupUi(self) + + self.mode = mode + self.root_path = root_path + self.sampID = sampID + + self.config = None + self.__read_config__() + + self.ui.spinBox_input_freq_signal.valueChanged.connect(self.__update_ui__) + self.ui.spinBox_bandPassOrder.valueChanged.connect(self.__update_ui__) + self.ui.doubleSpinBox_bandPassLow.valueChanged.connect(self.__update_ui__) + self.ui.doubleSpinBox_bandPassHigh.valueChanged.connect(self.__update_ui__) + self.ui.pushButton_confirm.clicked.connect(self.__write_config__) + self.ui.pushButton_cancel.clicked.connect(self.__rollback_config__) + self.ui.pushButton_cancel.clicked.connect(self.close) + + def __read_config__(self): + + if not Path(ConfigParams.LABEL_CHECK_CONFIG_FILE_PATH).exists(): + with open(ConfigParams.LABEL_CHECK_CONFIG_FILE_PATH, "w") as f: + dump(ConfigParams.LABEL_CHECK_CONFIG_NEW_CONTENT, f) + + with open(ConfigParams.LABEL_CHECK_CONFIG_FILE_PATH, "r") as f: + file_config = load(f.read(), Loader=FullLoader) + Config.update(file_config) + self.config = file_config + + if self.mode == "BCG": + Config.update({ + "Path": { + "Input_Signal": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT / + Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_INPUT_BCG_FILENAME + + str(Config["InputConfig"]["Freq"]) + + ConfigParams.ENDSWITH_TXT))), + "Input_Peak": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT / + Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_INPUT_JPEAK_FILENAME + + ConfigParams.ENDSWITH_TXT))), + "Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT / + Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_SAVE_JPEAK_FILENAME + + ConfigParams.ENDSWITH_TXT))) + }, + "Mode": self.mode + }) + elif self.mode == "ECG": + Config.update({ + "Path": { + "Input_Signal": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / + Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_INPUT_ECG_FILENAME + + str(Config["InputConfig"]["Freq"]) + + ConfigParams.ENDSWITH_TXT))), + "Input_Peak": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / + Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_INPUT_RPEAK_FILENAME + + ConfigParams.ENDSWITH_TXT))), + "Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / + Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_SAVE_RPEAK_FILENAME + + ConfigParams.ENDSWITH_TXT))) + }, + "Mode": self.mode + }) + else: + raise ValueError + + # 数据回显 + self.ui.spinBox_input_freq_signal.setValue(Config["InputConfig"]["Freq"]) + self.ui.plainTextEdit_file_path_input_signal.setPlainText(Config["Path"]["Input_Signal"]) + self.ui.plainTextEdit_file_path_input_peak.setPlainText(Config["Path"]["Input_Peak"]) + self.ui.plainTextEdit_file_path_save.setPlainText(Config["Path"]["Save"]) + if Config["Mode"] == "BCG": + self.ui.spinBox_bandPassOrder.setValue(Config["Filter"]["BCGBandPassOrder"]) + self.ui.doubleSpinBox_bandPassLow.setValue(Config["Filter"]["BCGBandPassLow"]) + self.ui.doubleSpinBox_bandPassHigh.setValue(Config["Filter"]["BCGBandPassHigh"]) + elif Config["Mode"] == "ECG": + self.ui.spinBox_bandPassOrder.setValue(Config["Filter"]["ECGBandPassOrder"]) + self.ui.doubleSpinBox_bandPassLow.setValue(Config["Filter"]["ECGBandPassLow"]) + self.ui.doubleSpinBox_bandPassHigh.setValue(Config["Filter"]["ECGBandPassHigh"]) + else: + raise ValueError + + def __write_config__(self): + + # 从界面写入配置 + Config["InputConfig"]["Freq"] = self.ui.spinBox_input_freq_signal.value() + Config["Path"]["Input_Signal"] = self.ui.plainTextEdit_file_path_input_signal.toPlainText() + Config["Path"]["Input_Peak"] = self.ui.plainTextEdit_file_path_input_peak.toPlainText() + Config["Path"]["Save"] = self.ui.plainTextEdit_file_path_save.toPlainText() + if Config["Mode"] == "BCG": + Config["Filter"]["BCGBandPassOrder"] = self.ui.spinBox_bandPassOrder.value() + Config["Filter"]["BCGBandPassLow"] = self.ui.doubleSpinBox_bandPassLow.value() + Config["Filter"]["BCGBandPassHigh"] = self.ui.doubleSpinBox_bandPassHigh.value() + elif Config["Mode"] == "ECG": + Config["Filter"]["ECGBandPassOrder"] = self.ui.spinBox_bandPassOrder.value() + Config["Filter"]["ECGBandPassLow"] = self.ui.doubleSpinBox_bandPassLow.value() + Config["Filter"]["ECGBandPassHigh"] = self.ui.doubleSpinBox_bandPassHigh.value() + else: + raise ValueError + + # 保存配置到文件 + self.config["InputConfig"]["Freq"] = self.ui.spinBox_input_freq_signal.value() + + with open(ConfigParams.LABEL_CHECK_CONFIG_FILE_PATH, "w") as f: + dump(self.config, f) + + self.close() + + def __rollback_config__(self): + + self.__read_config__() + + def __update_ui__(self): + + if self.mode == "BCG": + self.ui.plainTextEdit_file_path_input_signal.setPlainText( + str((Path(self.root_path) / + ConfigParams.PUBLIC_PATH_ORGBCG_TEXT / + Path(str(self.sampID)) / + Path(ConfigParams.LABEL_CHECK_INPUT_BCG_FILENAME + + str(self.ui.spinBox_input_freq_signal.value()) + + ConfigParams.ENDSWITH_TXT)))) + elif self.mode == "ECG": + self.ui.plainTextEdit_file_path_input_signal.setPlainText( + str((Path(self.root_path) / + ConfigParams.PUBLIC_PATH_PSG_TEXT / + Path(str(self.sampID)) / + Path(ConfigParams.LABEL_CHECK_INPUT_ECG_FILENAME + + str(self.ui.spinBox_input_freq_signal.value()) + + ConfigParams.ENDSWITH_TXT)))) + else: + raise ValueError + + +class MainWindow_label_check(QMainWindow): + + def __init__(self): + + super(MainWindow_label_check, self).__init__() + self.ui = Ui_MainWindow_label_check() + self.ui.setupUi(self) + + self.mode = None + self.root_path = None + self.sampID = None + + self.data = None + self.original_peak = None + self.corrected_peak = None + + self.setting = None + + # 初始化进度条 + self.progressbar = None + PublicFunc.add_progressbar(self) + + #初始化画框 + self.fig = None + self.canvas = None + self.figToolbar = None + self.gs = None + self.ax0 = None + self.ax1 = None + + self.line_processed_data_1 = None + self.line_processed_data_2 = None + self.point_peak_original = None + self.point_peak_corrected = None + + self.msgBox = QMessageBox() + self.msgBox.setWindowTitle(Constants.MAINWINDOW_MSGBOX_TITLE) + + @overrides + def show(self, mode, root_path, sampID): + + super().show() + self.mode = mode + self.root_path = root_path + self.sampID = sampID + + self.setting = SettingWindow(mode, root_path, sampID) + + # 初始化画框 + self.fig = plt.figure(figsize=(12, 9), dpi=100) + self.canvas = FigureCanvasQTAgg(self.fig) + self.figToolbar = NavigationToolbar2QT(self.canvas) + for action in self.figToolbar.actions(): + if action.text() == "Subplots" or action.text() == "Customize": + self.figToolbar.removeAction(action) + self.ui.verticalLayout_canvas.addWidget(self.canvas) + self.ui.verticalLayout_canvas.addWidget(self.figToolbar) + self.gs = gridspec.GridSpec(2, 1, height_ratios=[1, 1]) + self.fig.subplots_adjust(top=0.98, bottom=0.05, right=0.98, left=0.1, hspace=0, wspace=0) + self.ax0 = self.fig.add_subplot(self.gs[0]) + self.ax0.grid(True) + self.ax0.xaxis.set_major_formatter(ConfigParams.FORMATTER) + self.ax0.tick_params(axis='x', colors=Constants.PLOT_COLOR_WHITE) + self.ax1 = self.fig.add_subplot(self.gs[1]) + self.ax1.grid(True) + self.ax1.xaxis.set_major_formatter(ConfigParams.FORMATTER) + + PublicFunc.__resetAllButton__(self, ButtonState) + + self.ui.label_mode.setText(self.mode) + + # 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.doubleSpinBox_findpeaks_min_interval.editingFinished.connect(self.__update_config__) + self.ui.doubleSpinBox_findpeaks_min_height.editingFinished.connect(self.__update_config__) + self.ui.spinBox_moveLength.editingFinished.connect(self.__update_config__) + self.ui.spinBox_maxRange.editingFinished.connect(self.__update_config__) + self.ui.spinBox_moveSpeed.editingFinished.connect(self.__update_config__) + + @overrides + def closeEvent(self, event): + + PublicFunc.__disableAllButton__(self, ButtonState) + + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg(Constants.SHUTTING_DOWN)) + QApplication.processEvents() + + # 清空画框 + if self.line_processed_data_1 and self.line_processed_data_2 and self.point_peak_original and self.point_peak_corrected: + del self.line_processed_data_1 + del self.line_processed_data_2 + del self.point_peak_original + del self.point_peak_corrected + self.canvas.draw() + + # 释放资源 + del self.data + self.fig.clf() + plt.close(self.fig) + self.deleteLater() + collect() + self.canvas = None + event.accept() + + @staticmethod + def __reset__(): + + ButtonState["Current"].update(ButtonState["Default"].copy()) + + def __plot__(self): + + # 清空画框 + if self.line_processed_data_1 and self.line_processed_data_2 and self.point_peak_original and self.point_peak_corrected: + try: + self.line_processed_data_1.remove() + self.line_processed_data_2.remove() + self.point_peak_original.remove() + self.point_peak_corrected.remove() + except ValueError: + pass + + sender = self.sender() + + if sender == self.ui.pushButton_input: + # self.point_RRIV, = self.ax0.plot(self.data.peak[2:], self.data.RRIV, + # 'r.', + # label=Constants.DETECT_RPEAK_PLOT_LABEL_RRIV) + # self.line_data, = self.ax1.plot(self.data.processed_data, + # color=Constants.PLOT_COLOR_BLUE, + # label=Constants.DETECT_RPEAK_PLOT_LABEL_ECG) + # self.point_peak, = self.ax1.plot(self.data.peak, self.data.processed_data[self.data.peak], + # 'r*', + # label=Constants.DETECT_RPEAK_PLOT_LABEL_R_PEAKS) + # self.line_interval, = self.ax1.plot(self.data.interval, + # color=Constants.PLOT_COLOR_GREEN, + # label=Constants.DETECT_RPEAK_PLOT_LABEL_INTERVAL) + self.ax0.legend(loc=Constants.PLOT_UPPER_RIGHT) + self.ax1.legend(loc=Constants.PLOT_UPPER_RIGHT) + status = True + info = Constants.DRAWING_FINISHED + else: + status = False + info = Constants.DRAWING_FAILURE + + self.canvas.draw() + return status, info + + def __update_config__(self): + + Config["FindPeaks"]["MinInterval"] = self.ui.doubleSpinBox_findpeaks_min_interval.value() + Config["FindPeaks"]["MinHeight"] = self.ui.doubleSpinBox_findpeaks_min_height.value() + Config["CustomAutoplayArgs"]["MoveLength"] = self.ui.spinBox_moveLength.value() + Config["CustomAutoplayArgs"]["MaxRange"] = self.ui.spinBox_maxRange.value() + Config["CustomAutoplayArgs"]["MoveSpeed"] = self.ui.spinBox_moveSpeed.value() + + +class Data: + + def __init__(self): + self.file_path_input_signal = Config["Path"]["Input_Signal"] + self.file_path_input_peak = Config["Path"]["Input_Peak"] + self.file_path_save = Config["Path"]["Save"] + + self.raw_data = None + self.processed_data = None + self.peak = None \ No newline at end of file diff --git a/func/Module_mainwindow.py b/func/Module_mainwindow.py index c7d63bf..72ddc6c 100644 --- a/func/Module_mainwindow.py +++ b/func/Module_mainwindow.py @@ -30,15 +30,18 @@ class MainWindow(QMainWindow, Ui_Signal_Label): self.ui = Ui_Signal_Label() self.ui.setupUi(self) + # 消息弹窗初始化 + self.msgBox = QMessageBox() + self.msgBox.setWindowTitle(Constants.MAINWINDOW_MSGBOX_TITLE) + self.__read_config__() self.ui.plainTextEdit_root_path.setPlainText(Config["Path"]["Root"]) self.seek_sampID(Path(Config["Path"]["Root"]) / Path(ConfigParams.PUBLIC_PATH_ORGBCG_TEXT)) self.preprocess = None - - # 消息弹窗初始化 - self.msgBox = QMessageBox() - self.msgBox.setWindowTitle(Constants.MAINWINDOW_MSGBOX_TITLE) + self.detect_Jpeak = None + self.detect_Rpeak = None + self.label_check = None # 绑定槽函数 self.ui.pushButton_open.clicked.connect(self.__slot_btn_open__) @@ -46,6 +49,8 @@ class MainWindow(QMainWindow, Ui_Signal_Label): self.ui.pushButton_preprocess_ECG.clicked.connect(self.__slot_btn_preprocess__) self.ui.pushButton_detect_Jpeak.clicked.connect(self.__slot_btn_detect_Jpeak__) self.ui.pushButton_detect_Rpeak.clicked.connect(self.__slot_btn_detect_Rpeak__) + self.ui.pushButton_label_check_BCG.clicked.connect(self.__slot_btn_label_check__) + self.ui.pushButton_label_check_ECG.clicked.connect(self.__slot_btn_label_check__) @staticmethod def __read_config__(): @@ -88,10 +93,11 @@ class MainWindow(QMainWindow, Ui_Signal_Label): sampID = int(self.ui.comboBox_sampID.currentText()) if sender == self.ui.pushButton_preprocess_BCG: mode = "BCG" - self.preprocess.show(mode, root_path, sampID) elif sender == self.ui.pushButton_preprocess_ECG: mode = "ECG" - self.preprocess.show(mode, root_path, sampID) + else: + mode = "ModeNotExist" + self.preprocess.show(mode, root_path, sampID) def __slot_btn_detect_Jpeak__(self): @@ -107,6 +113,21 @@ class MainWindow(QMainWindow, Ui_Signal_Label): sampID = int(self.ui.comboBox_sampID.currentText()) self.detect_Rpeak.show(root_path, sampID) + def __slot_btn_label_check__(self): + + self.label_check = MainWindow_detect_Rpeak() + + sender = self.sender() + root_path = self.ui.plainTextEdit_root_path.toPlainText() + sampID = int(self.ui.comboBox_sampID.currentText()) + if sender == self.ui.pushButton_label_check_BCG: + mode = "BCG" + elif sender == self.ui.pushButton_label_check_ECG: + mode = "ECG" + else: + mode = "ModeNotExist" + self.label_check.show(mode, root_path, sampID) + def seek_sampID(self, path): if not Path(path).exists(): diff --git a/func/Module_preprocess.py b/func/Module_preprocess.py index 85ba8e0..22bec8c 100644 --- a/func/Module_preprocess.py +++ b/func/Module_preprocess.py @@ -2,7 +2,7 @@ from gc import collect from pathlib import Path import matplotlib.pyplot as plt -from PySide6.QtWidgets import QMessageBox, QMainWindow, QWidget, QPushButton, QProgressBar, QApplication +from PySide6.QtWidgets import QMessageBox, QMainWindow, QApplication from matplotlib import gridspec from matplotlib.backends.backend_qt import NavigationToolbar2QT from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg @@ -85,7 +85,7 @@ class SettingWindow(QMainWindow): }, "Mode": self.mode }) - else: + elif self.mode == "ECG": Config.update({ "Path": { "Input": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / @@ -99,6 +99,8 @@ class SettingWindow(QMainWindow): }, "Mode": self.mode }) + else: + raise ValueError # 数据回显 self.ui.spinBox_input_freq.setValue(Config["InputConfig"]["Freq"]) @@ -144,7 +146,7 @@ class SettingWindow(QMainWindow): Path(ConfigParams.PREPROCESS_SAVE_BCG_FILENAME + str(self.ui.spinBox_output_freq.value()) + ConfigParams.ENDSWITH_TXT)))) - else: + elif self.mode == "ECG": self.ui.plainTextEdit_file_path_input.setPlainText( str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / @@ -159,6 +161,8 @@ class SettingWindow(QMainWindow): Path(ConfigParams.PREPROCESS_SAVE_ECG_FILENAME + str(self.ui.spinBox_output_freq.value()) + ConfigParams.ENDSWITH_TXT)))) + else: + raise ValueError class MainWindow_preprocess(QMainWindow): @@ -179,7 +183,7 @@ class MainWindow_preprocess(QMainWindow): # 初始化进度条 self.progressbar = None - self.add_progressbar() + PublicFunc.add_progressbar(self) #初始化画框 self.fig = None @@ -219,17 +223,19 @@ class MainWindow_preprocess(QMainWindow): self.ax0.grid(True) self.ax0.xaxis.set_major_formatter(ConfigParams.FORMATTER) - self.__resetAllButton__() + PublicFunc.__resetAllButton__(self, ButtonState) self.ui.label_mode.setText(self.mode) if self.mode == "BCG": self.ui.spinBox_bandPassOrder.setValue(Config["Filter"]["BCGBandPassOrder"]) self.ui.doubleSpinBox_bandPassLow.setValue(Config["Filter"]["BCGBandPassLow"]) self.ui.doubleSpinBox_bandPassHigh.setValue(Config["Filter"]["BCGBandPassHigh"]) - else: + elif self.mode == "ECG": self.ui.spinBox_bandPassOrder.setValue(Config["Filter"]["ECGBandPassOrder"]) self.ui.doubleSpinBox_bandPassLow.setValue(Config["Filter"]["ECGBandPassLow"]) self.ui.doubleSpinBox_bandPassHigh.setValue(Config["Filter"]["ECGBandPassHigh"]) + else: + raise ValueError self.ui.pushButton_input.clicked.connect(self.__slot_btn_input__) self.ui.pushButton_input_setting.clicked.connect(self.setting.show) @@ -242,9 +248,9 @@ class MainWindow_preprocess(QMainWindow): @overrides def closeEvent(self, event): - self.__disableAllButton__() + PublicFunc.__disableAllButton__(self, ButtonState) - self.statusbar_show_msg(PublicFunc.format_status_msg(Constants.SHUTTING_DOWN)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg(Constants.SHUTTING_DOWN)) QApplication.processEvents() # 清空画框 @@ -297,74 +303,22 @@ class MainWindow_preprocess(QMainWindow): self.canvas.draw() return status, info - def __disableAllButton__(self): - # 禁用所有按钮 - all_widgets = self.centralWidget().findChildren(QWidget) - - # 迭代所有部件,查找按钮并禁用它们 - for widget in all_widgets: - if isinstance(widget, QPushButton): - if widget.objectName() in ButtonState["Current"].keys(): - widget.setEnabled(False) - - def __enableAllButton__(self): - # 启用按钮 - all_widgets = self.centralWidget().findChildren(QWidget) - - # 迭代所有部件,查找按钮并启用它们 - for widget in all_widgets: - if isinstance(widget, QPushButton): - if widget.objectName() in ButtonState["Current"].keys(): - widget.setEnabled(ButtonState["Current"][widget.objectName()]) - - def __resetAllButton__(self): - # 启用按钮 - all_widgets = self.centralWidget().findChildren(QWidget) - - # 迭代所有部件,查找按钮并启用它们 - for widget in all_widgets: - if isinstance(widget, QPushButton): - if widget.objectName() in ButtonState["Default"].keys(): - widget.setEnabled(ButtonState["Default"][widget.objectName()]) - def __update_config__(self): if self.mode == "BCG": Config["Filter"]["BCGBandPassOrder"] = self.ui.spinBox_bandPassOrder.value() Config["Filter"]["BCGBandPassLow"] = self.ui.doubleSpinBox_bandPassLow.value() Config["Filter"]["BCGBandPassHigh"] = self.ui.doubleSpinBox_bandPassHigh.value() - else: + elif self.mode == "ECG": Config["Filter"]["ECGBandPassOrder"] = self.ui.spinBox_bandPassOrder.value() Config["Filter"]["ECGBandPassLow"] = self.ui.doubleSpinBox_bandPassLow.value() Config["Filter"]["ECGBandPassHigh"] = self.ui.doubleSpinBox_bandPassHigh.value() - - def finish_operation(self): - - self.statusbar_show_msg(PublicFunc.format_status_msg(Constants.OPERATION_FINISHED)) - self.progressbar.setValue(100) - QApplication.processEvents() - - self.__enableAllButton__() - - def add_progressbar(self): - - self.progressbar = QProgressBar() - self.progressbar.setRange(0, 100) - self.progressbar.setValue(0) - self.progressbar.setStyleSheet(Constants.PROGRESSBAR_STYLE) - self.ui.statusbar.addPermanentWidget(self.progressbar) - - def statusbar_show_msg(self, msg): - - self.ui.statusbar.showMessage(msg) - - def statusbar_clear_msg(self): - - self.ui.statusbar.clearMessage() + else: + raise ValueError def __slot_btn_input__(self): - self.__disableAllButton__() + PublicFunc.__disableAllButton__(self, ButtonState) # 清空画框 if self.line_raw_data and self.line_processed_data: @@ -375,7 +329,7 @@ class MainWindow_preprocess(QMainWindow): pass self.canvas.draw() - self.statusbar_show_msg(PublicFunc.format_status_msg("(1/1)" + Constants.INPUTTING_DATA)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(1/1)" + Constants.INPUTTING_DATA)) self.progressbar.setValue(0) QApplication.processEvents() @@ -385,19 +339,19 @@ class MainWindow_preprocess(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(1/1)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(1/1)" + info, Constants.TIPS_TYPE_INFO) MainWindow_preprocess.__reset__() - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) def __slot_btn_view__(self): - self.__disableAllButton__() + PublicFunc.__disableAllButton__(self, ButtonState) - self.statusbar_show_msg(PublicFunc.format_status_msg("(1/2)" + Constants.PREPROCESS_PROCESSING_DATA)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(1/2)" + Constants.PREPROCESS_PROCESSING_DATA)) self.progressbar.setValue(0) QApplication.processEvents() @@ -406,12 +360,12 @@ class MainWindow_preprocess(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(1/2)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(1/2)" + info, Constants.TIPS_TYPE_INFO) - self.statusbar_show_msg(PublicFunc.format_status_msg("(2/2)" + Constants.DRAWING_DATA)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(2/2)" + Constants.DRAWING_DATA)) self.progressbar.setValue(50) QApplication.processEvents() @@ -420,13 +374,13 @@ class MainWindow_preprocess(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(2/2)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(2/2)" + info, Constants.TIPS_TYPE_INFO) ButtonState["Current"]["pushButton_save"] = True - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) def __slot_btn_save__(self): @@ -435,9 +389,9 @@ class MainWindow_preprocess(QMainWindow): QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) if reply == QMessageBox.Yes: - self.__disableAllButton__() + PublicFunc.__disableAllButton__(self, ButtonState) - self.statusbar_show_msg(PublicFunc.format_status_msg("(1/1)" + Constants.SAVING_DATA)) + PublicFunc.statusbar_show_msg(self, PublicFunc.format_status_msg("(1/1)" + Constants.SAVING_DATA)) self.progressbar.setValue(0) QApplication.processEvents() @@ -457,13 +411,13 @@ class MainWindow_preprocess(QMainWindow): if not status: PublicFunc.text_output(self.ui, "(1/1)" + info, Constants.TIPS_TYPE_ERROR) PublicFunc.msgbox_output(self, info, Constants.MSGBOX_TYPE_ERROR) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) return else: PublicFunc.text_output(self.ui, "(1/1)" + info, Constants.TIPS_TYPE_INFO) PublicFunc.msgbox_output(self, info, Constants.TIPS_TYPE_INFO) - self.finish_operation() + PublicFunc.finish_operation(self, ButtonState) class Data: @@ -506,12 +460,14 @@ class Data: high_cut=Config["Filter"]["BCGBandPassHigh"], order=Config["Filter"]["BCGBandPassOrder"], sample_rate=Config["OutputConfig"]["Freq"]) - else: + elif Config["Mode"] == "ECG": self.processed_data = Butterworth_for_ECG_PreProcess(self.raw_data, type='bandpass', low_cut=Config["Filter"]["ECGBandPassLow"], high_cut=Config["Filter"]["ECGBandPassHigh"], order=Config["Filter"]["ECGBandPassOrder"], sample_rate=Config["OutputConfig"]["Freq"]) + else: + raise ValueError except Exception: return False, Constants.PREPROCESS_PROCESS_FAILURE + Constants.PREPROCESS_FAILURE_REASON["Filter_Exception"] diff --git a/func/utils/ConfigParams.py b/func/utils/ConfigParams.py index d63c76f..d1c7ead 100644 --- a/func/utils/ConfigParams.py +++ b/func/utils/ConfigParams.py @@ -94,6 +94,36 @@ class ConfigParams: DETECT_RPEAK_SAVE_CHUNK_SIZE: int = 100 # 人工纠正 + LABEL_CHECK_CONFIG_FILE_PATH: str = "./config/Config_label_check.yaml" + LABEL_CHECK_CONFIG_NEW_CONTENT = { + "InputConfig": { + "Freq": 1000 + }, + "Filter": { + "BCGBandPassOrder": 2, + "BCGBandPassLow": 2, + "BCGBandPassHigh": 10, + "ECGBandPassOrder": 2, + "ECGBandPassLow": 2, + "ECGBandPassHigh": 15 + }, + "FindPeaks" : { + "MinInterval": 1000, + "MinHeight": 0.5 + }, + "CustomAutoplayArgs": { + "MoveLength": 15000, + "MaxRange": 60000, + "MoveSpeed": 1000 + } + } + LABEL_CHECK_INPUT_BCG_FILENAME: str = "DSbcg_sig_" + LABEL_CHECK_INPUT_JPEAK_FILENAME: str = "JPeak_revise" + LABEL_CHECK_SAVE_JPEAK_FILENAME: str = "JPeak_revise_corrected" + LABEL_CHECK_INPUT_ECG_FILENAME: str = "ECG_filter_" + LABEL_CHECK_INPUT_RPEAK_FILENAME: str = "final_Rpeak" + LABEL_CHECK_SAVE_RPEAK_FILENAME: str = "final_Rpeak_corrected" + LABEL_CHECK_SAVE_CHUNK_SIZE: int = 100 # 体动标注 diff --git a/func/utils/Constants.py b/func/utils/Constants.py index 6c9835d..389ce9b 100644 --- a/func/utils/Constants.py +++ b/func/utils/Constants.py @@ -25,6 +25,7 @@ class Constants: OPERATION_FINISHED: str = "操作完成" OPERATION_FAILURE: str = "操作失败" + OPERATION_CANCELED: str = "操作取消" UNKNOWN_ERROR: str = "未知错误" SHUTTING_DOWN: str = "正在释放内存资源" @@ -80,8 +81,8 @@ class Constants: "Save_Exception": "(保存异常)" } - PREPROCESS_PLOT_LABEL_ORIGINAL_DATA: str = "Original Data" - PREPROCESS_PLOT_LABEL_PROCESSED_DATA: str = "Processed Data" + PREPROCESS_PLOT_LABEL_ORIGINAL_DATA: str = "Original_Data" + PREPROCESS_PLOT_LABEL_PROCESSED_DATA: str = "Processed_Data" PREPROCESS_OUTPUT_INPUT_AMP_OFFSET: int = 1850 # BCG的J峰算法定位 @@ -153,6 +154,27 @@ class Constants: DETECT_RPEAK_PLOT_LABEL_INTERVAL: str = "Interval" # 人工纠正 + LABEL_CHECK_PROCESSING_DATA: str = "正在处理数据" + LABEL_CHECK_PROCESS_FINISHED: str = "处理完成" + LABEL_CHECK_PROCESS_FAILURE: str = "处理失败" + + LABEL_CHECK_FAILURE_REASON = { + "Data_Path_Not_Exist": "(数据路径不存在)", + "Read_Data_Exception": "(读取数据异常)", + "Method_Not_Exist": "(检测方法不存在)", + "Read_Method_Exception": "(读取方法异常)", + "Predict_Exception": "(峰值预测异常)", + "Raw_Data_Not_Exist": "(原始数据不存在)", + "Filter_Exception": "(滤波器异常)", + "Processed_Data_Not_Exist": "(处理后数据不存在)", + "Peak_Not_Exist": "(预测的峰值不存在)", + "Save_Exception": "(保存异常)" + } + + LABEL_CHECK_PLOT_LABEL_BCG: str = "Data_Processed" + LABEL_CHECK_PLOT_LABEL_PEAK_ORIGINAL: str = "Peaks_Original" + LABEL_CHECK_PLOT_LABEL_PEAK_CORRECTED: str = "Peaks_Corrected" + # 体动标注 diff --git a/func/utils/PublicFunc.py b/func/utils/PublicFunc.py index 61fae19..fe23f4c 100644 --- a/func/utils/PublicFunc.py +++ b/func/utils/PublicFunc.py @@ -1,7 +1,7 @@ from datetime import datetime from logging import error, info -from PySide6.QtWidgets import QMessageBox +from PySide6.QtWidgets import QMessageBox, QWidget, QPushButton, QProgressBar, QApplication from func.utils.Constants import Constants from func.utils.CustomException import TipsTypeValueNotExistError, MsgBoxTypeValueNotExistError @@ -94,3 +94,64 @@ class PublicFunc: else: raise MsgBoxTypeValueNotExistError() main_window.msgBox.exec() + + @staticmethod + def __disableAllButton__(mainWindow, buttonState): + # 禁用所有按钮 + all_widgets = mainWindow.centralWidget().findChildren(QWidget) + + # 迭代所有部件,查找按钮并禁用它们 + for widget in all_widgets: + if isinstance(widget, QPushButton): + if widget.objectName() in buttonState["Current"].keys(): + widget.setEnabled(False) + + @staticmethod + def __enableAllButton__(mainWindow, buttonState): + # 启用按钮 + all_widgets = mainWindow.centralWidget().findChildren(QWidget) + + # 迭代所有部件,查找按钮并启用它们 + for widget in all_widgets: + if isinstance(widget, QPushButton): + if widget.objectName() in buttonState["Current"].keys(): + widget.setEnabled(buttonState["Current"][widget.objectName()]) + + @staticmethod + def __resetAllButton__(mainWindow, buttonState): + # 启用按钮 + all_widgets = mainWindow.centralWidget().findChildren(QWidget) + + # 迭代所有部件,查找按钮并启用它们 + for widget in all_widgets: + if isinstance(widget, QPushButton): + if widget.objectName() in buttonState["Default"].keys(): + widget.setEnabled(buttonState["Default"][widget.objectName()]) + + @staticmethod + def add_progressbar(mainWindow): + + mainWindow.progressbar = QProgressBar() + mainWindow.progressbar.setRange(0, 100) + mainWindow.progressbar.setValue(0) + mainWindow.progressbar.setStyleSheet(Constants.PROGRESSBAR_STYLE) + mainWindow.ui.statusbar.addPermanentWidget(mainWindow.progressbar) + + @staticmethod + def statusbar_show_msg(mainWindow, msg): + + mainWindow.ui.statusbar.showMessage(msg) + + @staticmethod + def statusbar_clear_msg(mainWindow): + + mainWindow.ui.statusbar.clearMessage() + + @staticmethod + def finish_operation(mainWindow, buttonState): + + PublicFunc.statusbar_show_msg(mainWindow, PublicFunc.format_status_msg(Constants.OPERATION_FINISHED)) + mainWindow.progressbar.setValue(100) + QApplication.processEvents() + + PublicFunc.__enableAllButton__(mainWindow, buttonState) \ No newline at end of file diff --git a/ui/MainWindow/MainWindow_label_check.py b/ui/MainWindow/MainWindow_label_check.py index 60650ea..1a51486 100644 --- a/ui/MainWindow/MainWindow_label_check.py +++ b/ui/MainWindow/MainWindow_label_check.py @@ -22,12 +22,12 @@ from PySide6.QtWidgets import (QAbstractSpinBox, QApplication, QCheckBox, QDoubl QTableWidget, QTableWidgetItem, QTextBrowser, QVBoxLayout, QWidget) -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - if not MainWindow.objectName(): - MainWindow.setObjectName(u"MainWindow") - MainWindow.resize(1920, 1080) - self.centralwidget = QWidget(MainWindow) +class Ui_MainWindow_label_check(object): + def setupUi(self, MainWindow_label_check): + if not MainWindow_label_check.objectName(): + MainWindow_label_check.setObjectName(u"MainWindow_label_check") + MainWindow_label_check.resize(1920, 1080) + self.centralwidget = QWidget(MainWindow_label_check) self.centralwidget.setObjectName(u"centralwidget") self.gridLayout = QGridLayout(self.centralwidget) self.gridLayout.setObjectName(u"gridLayout") @@ -81,6 +81,15 @@ class Ui_MainWindow(object): self.verticalLayout_2.addItem(self.verticalSpacer) + self.label_mode = QLabel(self.groupBox_left) + self.label_mode.setObjectName(u"label_mode") + font2 = QFont() + font2.setPointSize(14) + self.label_mode.setFont(font2) + self.label_mode.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.verticalLayout_2.addWidget(self.label_mode) + self.groupBox = QGroupBox(self.groupBox_left) self.groupBox.setObjectName(u"groupBox") self.gridLayout_2 = QGridLayout(self.groupBox) @@ -341,13 +350,13 @@ class Ui_MainWindow(object): self.horizontalLayout_3.addWidget(self.checkBox) - self.pushButton = QPushButton(self.groupBox_left) - self.pushButton.setObjectName(u"pushButton") - sizePolicy.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth()) - self.pushButton.setSizePolicy(sizePolicy) - self.pushButton.setFont(font1) + self.pushButton_save = QPushButton(self.groupBox_left) + self.pushButton_save.setObjectName(u"pushButton_save") + sizePolicy.setHeightForWidth(self.pushButton_save.sizePolicy().hasHeightForWidth()) + self.pushButton_save.setSizePolicy(sizePolicy) + self.pushButton_save.setFont(font1) - self.horizontalLayout_3.addWidget(self.pushButton) + self.horizontalLayout_3.addWidget(self.pushButton_save) self.verticalLayout_2.addLayout(self.horizontalLayout_3) @@ -368,9 +377,10 @@ class Ui_MainWindow(object): self.verticalLayout_2.setStretch(1, 1) self.verticalLayout_2.setStretch(2, 1) self.verticalLayout_2.setStretch(3, 1) - self.verticalLayout_2.setStretch(4, 6) - self.verticalLayout_2.setStretch(5, 1) + self.verticalLayout_2.setStretch(4, 1) + self.verticalLayout_2.setStretch(5, 6) self.verticalLayout_2.setStretch(6, 1) + self.verticalLayout_2.setStretch(7, 1) self.gridLayout.addWidget(self.groupBox_left, 0, 0, 1, 1) @@ -456,52 +466,53 @@ class Ui_MainWindow(object): self.gridLayout.setColumnStretch(0, 2) self.gridLayout.setColumnStretch(1, 6) self.gridLayout.setColumnStretch(2, 2) - MainWindow.setCentralWidget(self.centralwidget) - self.statusbar = QStatusBar(MainWindow) + MainWindow_label_check.setCentralWidget(self.centralwidget) + self.statusbar = QStatusBar(MainWindow_label_check) self.statusbar.setObjectName(u"statusbar") - MainWindow.setStatusBar(self.statusbar) + MainWindow_label_check.setStatusBar(self.statusbar) - self.retranslateUi(MainWindow) + self.retranslateUi(MainWindow_label_check) - QMetaObject.connectSlotsByName(MainWindow) + QMetaObject.connectSlotsByName(MainWindow_label_check) # setupUi - def retranslateUi(self, MainWindow): - MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"\u4eba\u5de5\u7ea0\u6b63", None)) - self.groupBox_canvas.setTitle(QCoreApplication.translate("MainWindow", u"\u7ed8\u56fe\u533a", None)) - self.groupBox_left.setTitle(QCoreApplication.translate("MainWindow", u"\u4eba\u5de5\u7ea0\u6b63", None)) - self.pushButton_input_setting.setText(QCoreApplication.translate("MainWindow", u"\u5bfc\u5165\u8bbe\u7f6e", None)) - self.pushButton_input.setText(QCoreApplication.translate("MainWindow", u"\u5f00\u59cb\u5bfc\u5165", None)) - self.groupBox.setTitle(QCoreApplication.translate("MainWindow", u"\u5bfb\u5cf0\u53c2\u6570\u8bbe\u7f6e", None)) - self.label_4.setText(QCoreApplication.translate("MainWindow", u"\u6700\u5c0f\u95f4\u9694", None)) - self.label_3.setText(QCoreApplication.translate("MainWindow", u"\u6700\u5c0f\u9ad8\u5ea6", None)) - self.groupBox_2.setTitle(QCoreApplication.translate("MainWindow", u"\u81ea\u52a8\u64ad\u653e", None)) - self.pushButton_prev_move.setText(QCoreApplication.translate("MainWindow", u"< <(A)", None)) - self.pushButton_pause.setText(QCoreApplication.translate("MainWindow", u"| |(S)", None)) - self.pushButton_next_move.setText(QCoreApplication.translate("MainWindow", u"> >(D)", None)) - self.groupBox_3.setTitle(QCoreApplication.translate("MainWindow", u"\u8bbe\u7f6e", None)) - self.label_moveLength_preset_1.setText(QCoreApplication.translate("MainWindow", u"10000", None)) - self.label_maxRange_preset_1.setText(QCoreApplication.translate("MainWindow", u"40000", None)) - self.radioButton_move_preset_1.setText(QCoreApplication.translate("MainWindow", u"\u9884\u8bbe1", None)) - self.label_moveSpeed_preset_3.setText(QCoreApplication.translate("MainWindow", u"500", None)) - self.radioButton_move_preset_2.setText(QCoreApplication.translate("MainWindow", u"\u9884\u8bbe2", None)) - self.label_maxRange_preset_3.setText(QCoreApplication.translate("MainWindow", u"100000", None)) - self.label_maxRange_preset_2.setText(QCoreApplication.translate("MainWindow", u"80000", None)) - self.radioButton_move_preset_3.setText(QCoreApplication.translate("MainWindow", u"\u9884\u8bbe3", None)) - self.label_moveLength_preset_3.setText(QCoreApplication.translate("MainWindow", u"25000", None)) - self.label_moveSpeed_preset_2.setText(QCoreApplication.translate("MainWindow", u"500", None)) - self.label_moveLength_preset_2.setText(QCoreApplication.translate("MainWindow", u"20000", None)) - self.radioButton_move_custom.setText(QCoreApplication.translate("MainWindow", u"\u81ea\u5b9a\u4e49", None)) - self.label_moveSpeed_preset_1.setText(QCoreApplication.translate("MainWindow", u"500", None)) - self.label_7.setText(QCoreApplication.translate("MainWindow", u"\u79fb\u52a8\u8ddd\u79bb", None)) - self.label_6.setText(QCoreApplication.translate("MainWindow", u"\u6700\u5927\u8303\u56f4", None)) - self.label_8.setText(QCoreApplication.translate("MainWindow", u"\u79fb\u52a8\u95f4\u9694(ms)", None)) - self.checkBox.setText(QCoreApplication.translate("MainWindow", u"\u7ed8\u5236\u53c2\u8003\u7ebf", None)) - self.pushButton.setText(QCoreApplication.translate("MainWindow", u"\u5bfc\u51fa\u6807\u7b7e", None)) - self.groupBox_4.setTitle(QCoreApplication.translate("MainWindow", u"\u65e5\u5fd7", None)) - self.groupBox_right.setTitle(QCoreApplication.translate("MainWindow", u"\u5cf0\u503c\u5750\u6807\u548c\u4fe1\u606f", None)) - self.label_9.setText(QCoreApplication.translate("MainWindow", u"\u6570\u636e\u957f\u5ea6(\u70b9\u6570)", None)) - self.label_11.setText(QCoreApplication.translate("MainWindow", u"\u7ea0\u6b63\u524d\u5cf0\u503c\u4e2a\u6570", None)) - self.label_12.setText(QCoreApplication.translate("MainWindow", u"\u7ea0\u6b63\u540e\u5cf0\u503c\u4e2a\u6570", None)) + def retranslateUi(self, MainWindow_label_check): + MainWindow_label_check.setWindowTitle(QCoreApplication.translate("MainWindow_label_check", u"\u4eba\u5de5\u7ea0\u6b63", None)) + self.groupBox_canvas.setTitle(QCoreApplication.translate("MainWindow_label_check", u"\u7ed8\u56fe\u533a", None)) + self.groupBox_left.setTitle(QCoreApplication.translate("MainWindow_label_check", u"\u4eba\u5de5\u7ea0\u6b63", None)) + self.pushButton_input_setting.setText(QCoreApplication.translate("MainWindow_label_check", u"\u5bfc\u5165\u8bbe\u7f6e", None)) + self.pushButton_input.setText(QCoreApplication.translate("MainWindow_label_check", u"\u5f00\u59cb\u5bfc\u5165", None)) + self.label_mode.setText(QCoreApplication.translate("MainWindow_label_check", u"\u5904\u7406\u7684\u4fe1\u53f7\u7c7b\u578b", None)) + self.groupBox.setTitle(QCoreApplication.translate("MainWindow_label_check", u"\u5bfb\u5cf0\u53c2\u6570\u8bbe\u7f6e", None)) + self.label_4.setText(QCoreApplication.translate("MainWindow_label_check", u"\u6700\u5c0f\u95f4\u9694", None)) + self.label_3.setText(QCoreApplication.translate("MainWindow_label_check", u"\u6700\u5c0f\u9ad8\u5ea6", None)) + self.groupBox_2.setTitle(QCoreApplication.translate("MainWindow_label_check", u"\u81ea\u52a8\u64ad\u653e", None)) + self.pushButton_prev_move.setText(QCoreApplication.translate("MainWindow_label_check", u"< <(A)", None)) + self.pushButton_pause.setText(QCoreApplication.translate("MainWindow_label_check", u"| |(S)", None)) + self.pushButton_next_move.setText(QCoreApplication.translate("MainWindow_label_check", u"> >(D)", None)) + self.groupBox_3.setTitle(QCoreApplication.translate("MainWindow_label_check", u"\u8bbe\u7f6e", None)) + self.label_moveLength_preset_1.setText(QCoreApplication.translate("MainWindow_label_check", u"10000", None)) + self.label_maxRange_preset_1.setText(QCoreApplication.translate("MainWindow_label_check", u"40000", None)) + self.radioButton_move_preset_1.setText(QCoreApplication.translate("MainWindow_label_check", u"\u9884\u8bbe1", None)) + self.label_moveSpeed_preset_3.setText(QCoreApplication.translate("MainWindow_label_check", u"500", None)) + self.radioButton_move_preset_2.setText(QCoreApplication.translate("MainWindow_label_check", u"\u9884\u8bbe2", None)) + self.label_maxRange_preset_3.setText(QCoreApplication.translate("MainWindow_label_check", u"100000", None)) + self.label_maxRange_preset_2.setText(QCoreApplication.translate("MainWindow_label_check", u"80000", None)) + self.radioButton_move_preset_3.setText(QCoreApplication.translate("MainWindow_label_check", u"\u9884\u8bbe3", None)) + self.label_moveLength_preset_3.setText(QCoreApplication.translate("MainWindow_label_check", u"25000", None)) + self.label_moveSpeed_preset_2.setText(QCoreApplication.translate("MainWindow_label_check", u"500", None)) + self.label_moveLength_preset_2.setText(QCoreApplication.translate("MainWindow_label_check", u"20000", None)) + self.radioButton_move_custom.setText(QCoreApplication.translate("MainWindow_label_check", u"\u81ea\u5b9a\u4e49", None)) + self.label_moveSpeed_preset_1.setText(QCoreApplication.translate("MainWindow_label_check", u"500", None)) + self.label_7.setText(QCoreApplication.translate("MainWindow_label_check", u"\u79fb\u52a8\u8ddd\u79bb", None)) + self.label_6.setText(QCoreApplication.translate("MainWindow_label_check", u"\u6700\u5927\u8303\u56f4", None)) + self.label_8.setText(QCoreApplication.translate("MainWindow_label_check", u"\u79fb\u52a8\u95f4\u9694(ms)", None)) + self.checkBox.setText(QCoreApplication.translate("MainWindow_label_check", u"\u7ed8\u5236\u53c2\u8003\u7ebf", None)) + self.pushButton_save.setText(QCoreApplication.translate("MainWindow_label_check", u"\u5bfc\u51fa\u6807\u7b7e", None)) + self.groupBox_4.setTitle(QCoreApplication.translate("MainWindow_label_check", u"\u65e5\u5fd7", None)) + self.groupBox_right.setTitle(QCoreApplication.translate("MainWindow_label_check", u"\u5cf0\u503c\u5750\u6807\u548c\u4fe1\u606f", None)) + self.label_9.setText(QCoreApplication.translate("MainWindow_label_check", u"\u6570\u636e\u957f\u5ea6(\u70b9\u6570)", None)) + self.label_11.setText(QCoreApplication.translate("MainWindow_label_check", u"\u7ea0\u6b63\u524d\u5cf0\u503c\u4e2a\u6570", None)) + self.label_12.setText(QCoreApplication.translate("MainWindow_label_check", u"\u7ea0\u6b63\u540e\u5cf0\u503c\u4e2a\u6570", None)) # retranslateUi diff --git a/ui/MainWindow/MainWindow_label_check.ui b/ui/MainWindow/MainWindow_label_check.ui index 8a43f0a..b96017d 100644 --- a/ui/MainWindow/MainWindow_label_check.ui +++ b/ui/MainWindow/MainWindow_label_check.ui @@ -1,7 +1,7 @@ - MainWindow - + MainWindow_label_check + 0 @@ -42,7 +42,7 @@ 人工纠正 - + @@ -96,6 +96,21 @@ + + + + + 14 + + + + 处理的信号类型 + + + Qt::AlignmentFlag::AlignCenter + + + @@ -584,7 +599,7 @@ - + 0 diff --git a/ui/setting/label_check_input_setting.py b/ui/setting/label_check_input_setting.py index 583ff85..177e24c 100644 --- a/ui/setting/label_check_input_setting.py +++ b/ui/setting/label_check_input_setting.py @@ -20,12 +20,12 @@ from PySide6.QtWidgets import (QApplication, QDoubleSpinBox, QGridLayout, QGroup QPushButton, QSizePolicy, QSpinBox, QStatusBar, QVBoxLayout, QWidget) -class Ui_MainWindow_artifact_label_input_setting(object): - def setupUi(self, MainWindow_artifact_label_input_setting): - if not MainWindow_artifact_label_input_setting.objectName(): - MainWindow_artifact_label_input_setting.setObjectName(u"MainWindow_artifact_label_input_setting") - MainWindow_artifact_label_input_setting.resize(540, 540) - self.centralwidget = QWidget(MainWindow_artifact_label_input_setting) +class Ui_MainWindow_label_check_input_setting(object): + def setupUi(self, MainWindow_label_check_input_setting): + if not MainWindow_label_check_input_setting.objectName(): + MainWindow_label_check_input_setting.setObjectName(u"MainWindow_label_check_input_setting") + MainWindow_label_check_input_setting.resize(540, 540) + self.centralwidget = QWidget(MainWindow_label_check_input_setting) self.centralwidget.setObjectName(u"centralwidget") self.gridLayout = QGridLayout(self.centralwidget) self.gridLayout.setObjectName(u"gridLayout") @@ -166,33 +166,33 @@ class Ui_MainWindow_artifact_label_input_setting(object): self.gridLayout.addWidget(self.pushButton_confirm, 1, 2, 1, 1) - MainWindow_artifact_label_input_setting.setCentralWidget(self.centralwidget) - self.statusbar = QStatusBar(MainWindow_artifact_label_input_setting) + MainWindow_label_check_input_setting.setCentralWidget(self.centralwidget) + self.statusbar = QStatusBar(MainWindow_label_check_input_setting) self.statusbar.setObjectName(u"statusbar") - MainWindow_artifact_label_input_setting.setStatusBar(self.statusbar) + MainWindow_label_check_input_setting.setStatusBar(self.statusbar) - self.retranslateUi(MainWindow_artifact_label_input_setting) + self.retranslateUi(MainWindow_label_check_input_setting) - QMetaObject.connectSlotsByName(MainWindow_artifact_label_input_setting) + QMetaObject.connectSlotsByName(MainWindow_label_check_input_setting) # setupUi - def retranslateUi(self, MainWindow_artifact_label_input_setting): - MainWindow_artifact_label_input_setting.setWindowTitle(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"\u5bfc\u5165\u8bbe\u7f6e", None)) - self.pushButton_cancel.setText(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"\u53d6\u6d88", None)) - self.groupBox.setTitle(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"\u6587\u4ef6\u8def\u5f84", None)) - self.groupBox_file_path_input_signal.setTitle(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"\u9884\u5904\u7406\u540e\u7684\u4fe1\u53f7\u8def\u5f84", None)) - self.label_2.setText(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"\u91c7\u6837\u7387(Hz)\uff1a", None)) - self.groupBox_2.setTitle(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"\u5e26\u901a\u6ee4\u6ce2\u8bbe\u7f6e", None)) - self.label.setText(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"\u9636\u6570", None)) - self.label_3.setText(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"\u622a\u6b62\u9891\u7387(Hz)", None)) - self.label_4.setText(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"~", None)) + def retranslateUi(self, MainWindow_label_check_input_setting): + MainWindow_label_check_input_setting.setWindowTitle(QCoreApplication.translate("MainWindow_label_check_input_setting", u"\u5bfc\u5165\u8bbe\u7f6e", None)) + self.pushButton_cancel.setText(QCoreApplication.translate("MainWindow_label_check_input_setting", u"\u53d6\u6d88", None)) + self.groupBox.setTitle(QCoreApplication.translate("MainWindow_label_check_input_setting", u"\u6587\u4ef6\u8def\u5f84", None)) + self.groupBox_file_path_input_signal.setTitle(QCoreApplication.translate("MainWindow_label_check_input_setting", u"\u9884\u5904\u7406\u540e\u7684\u4fe1\u53f7\u8def\u5f84", None)) + self.label_2.setText(QCoreApplication.translate("MainWindow_label_check_input_setting", u"\u91c7\u6837\u7387(Hz)\uff1a", None)) + self.groupBox_2.setTitle(QCoreApplication.translate("MainWindow_label_check_input_setting", u"\u5e26\u901a\u6ee4\u6ce2\u8bbe\u7f6e", None)) + self.label.setText(QCoreApplication.translate("MainWindow_label_check_input_setting", u"\u9636\u6570", None)) + self.label_3.setText(QCoreApplication.translate("MainWindow_label_check_input_setting", u"\u622a\u6b62\u9891\u7387(Hz)", None)) + self.label_4.setText(QCoreApplication.translate("MainWindow_label_check_input_setting", u"~", None)) self.plainTextEdit_file_path_input_signal.setPlainText("") - self.plainTextEdit_file_path_input_signal.setPlaceholderText(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"\u6587\u4ef6\u8def\u5f84", None)) - self.groupBox_file_path_input_peak.setTitle(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"\u7b97\u6cd5\u5b9a\u4f4d\u7684\u5cf0\u503c\u8def\u5f84", None)) + self.plainTextEdit_file_path_input_signal.setPlaceholderText(QCoreApplication.translate("MainWindow_label_check_input_setting", u"\u6587\u4ef6\u8def\u5f84", None)) + self.groupBox_file_path_input_peak.setTitle(QCoreApplication.translate("MainWindow_label_check_input_setting", u"\u7b97\u6cd5\u5b9a\u4f4d\u7684\u5cf0\u503c\u8def\u5f84", None)) self.plainTextEdit_file_path_input_peak.setPlainText("") - self.plainTextEdit_file_path_input_peak.setPlaceholderText(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"\u6587\u4ef6\u8def\u5f84", None)) - self.groupBox_file_path_save.setTitle(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"\u4eba\u5de5\u7ea0\u6b63\u540e\u7684\u5cf0\u503c\u4fdd\u5b58\u8def\u5f84", None)) - self.plainTextEdit_file_path_save.setPlaceholderText(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"\u4fdd\u5b58\u8def\u5f84", None)) - self.pushButton_confirm.setText(QCoreApplication.translate("MainWindow_artifact_label_input_setting", u"\u786e\u5b9a", None)) + self.plainTextEdit_file_path_input_peak.setPlaceholderText(QCoreApplication.translate("MainWindow_label_check_input_setting", u"\u6587\u4ef6\u8def\u5f84", None)) + self.groupBox_file_path_save.setTitle(QCoreApplication.translate("MainWindow_label_check_input_setting", u"\u4eba\u5de5\u7ea0\u6b63\u540e\u7684\u5cf0\u503c\u4fdd\u5b58\u8def\u5f84", None)) + self.plainTextEdit_file_path_save.setPlaceholderText(QCoreApplication.translate("MainWindow_label_check_input_setting", u"\u4fdd\u5b58\u8def\u5f84", None)) + self.pushButton_confirm.setText(QCoreApplication.translate("MainWindow_label_check_input_setting", u"\u786e\u5b9a", None)) # retranslateUi diff --git a/ui/setting/label_check_input_setting.ui b/ui/setting/label_check_input_setting.ui index 890f643..c83943f 100644 --- a/ui/setting/label_check_input_setting.ui +++ b/ui/setting/label_check_input_setting.ui @@ -1,7 +1,7 @@ - MainWindow_artifact_label_input_setting - + MainWindow_label_check_input_setting + 0