diff --git a/MainWindow.py b/MainWindow.py index 60d4e98..6b3a0ea 100644 --- a/MainWindow.py +++ b/MainWindow.py @@ -21,8 +21,32 @@ class Ui_MainWindow(object): self.gridLayout.setObjectName("gridLayout") self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") - self.verticalLayout_left = QtWidgets.QVBoxLayout() - self.verticalLayout_left.setObjectName("verticalLayout_left") + self.gridLayout_left = QtWidgets.QGridLayout() + self.gridLayout_left.setObjectName("gridLayout_left") + self.pushButton_outputLabel = QtWidgets.QPushButton(self.centralwidget) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.pushButton_outputLabel.sizePolicy().hasHeightForWidth()) + self.pushButton_outputLabel.setSizePolicy(sizePolicy) + font = QtGui.QFont() + font.setFamily("黑体") + font.setPointSize(14) + self.pushButton_outputLabel.setFont(font) + self.pushButton_outputLabel.setObjectName("pushButton_outputLabel") + self.gridLayout_left.addWidget(self.pushButton_outputLabel, 6, 1, 1, 1) + self.pushButton_append = QtWidgets.QPushButton(self.centralwidget) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.pushButton_append.sizePolicy().hasHeightForWidth()) + self.pushButton_append.setSizePolicy(sizePolicy) + font = QtGui.QFont() + font.setFamily("黑体") + font.setPointSize(14) + self.pushButton_append.setFont(font) + self.pushButton_append.setObjectName("pushButton_append") + self.gridLayout_left.addWidget(self.pushButton_append, 6, 0, 1, 1) self.groupBox_inputSetting = QtWidgets.QGroupBox(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) @@ -493,9 +517,7 @@ class Ui_MainWindow(object): self.pushButton_savepath_open.setObjectName("pushButton_savepath_open") self.gridLayout_19.addWidget(self.pushButton_savepath_open, 0, 2, 1, 1) self.gridLayout_4.addWidget(self.groupBox_save, 5, 0, 1, 5) - self.verticalLayout_left.addWidget(self.groupBox_inputSetting) - spacerItem9 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_left.addItem(spacerItem9) + self.gridLayout_left.addWidget(self.groupBox_inputSetting, 0, 0, 1, 2) self.groupBox_autoplay = QtWidgets.QGroupBox(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) @@ -843,9 +865,7 @@ class Ui_MainWindow(object): self.horizontalLayout_move_operate.addWidget(self.pushButton_right_move) self.gridLayout_49.addLayout(self.horizontalLayout_move_operate, 0, 0, 1, 2) self.gridLayout_6.addWidget(self.groupBox_move, 0, 0, 1, 1) - self.verticalLayout_left.addWidget(self.groupBox_autoplay) - spacerItem10 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_left.addItem(spacerItem10) + self.gridLayout_left.addWidget(self.groupBox_autoplay, 2, 0, 1, 2) self.groupBox_findpeaks_options = QtWidgets.QGroupBox(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) @@ -909,27 +929,19 @@ class Ui_MainWindow(object): self.lineEdit_findpeaks_min_height.setPlaceholderText("") self.lineEdit_findpeaks_min_height.setObjectName("lineEdit_findpeaks_min_height") self.gridLayout_21.addWidget(self.lineEdit_findpeaks_min_height, 0, 3, 1, 1) - self.verticalLayout_left.addWidget(self.groupBox_findpeaks_options) + self.gridLayout_left.addWidget(self.groupBox_findpeaks_options, 4, 0, 1, 2) + spacerItem9 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.gridLayout_left.addItem(spacerItem9, 1, 0, 1, 2) + spacerItem10 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.gridLayout_left.addItem(spacerItem10, 5, 0, 1, 2) spacerItem11 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_left.addItem(spacerItem11) - self.pushButton_outputLabel = QtWidgets.QPushButton(self.centralwidget) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.pushButton_outputLabel.sizePolicy().hasHeightForWidth()) - self.pushButton_outputLabel.setSizePolicy(sizePolicy) - font = QtGui.QFont() - font.setFamily("黑体") - font.setPointSize(14) - self.pushButton_outputLabel.setFont(font) - self.pushButton_outputLabel.setObjectName("pushButton_outputLabel") - self.verticalLayout_left.addWidget(self.pushButton_outputLabel) - self.verticalLayout_left.setStretch(0, 10) - self.verticalLayout_left.setStretch(1, 2) - self.verticalLayout_left.setStretch(2, 6) - self.verticalLayout_left.setStretch(3, 2) - self.verticalLayout_left.setStretch(6, 2) - self.horizontalLayout.addLayout(self.verticalLayout_left) + self.gridLayout_left.addItem(spacerItem11, 3, 0, 1, 2) + self.gridLayout_left.setRowStretch(0, 10) + self.gridLayout_left.setRowStretch(1, 2) + self.gridLayout_left.setRowStretch(2, 6) + self.gridLayout_left.setRowStretch(3, 2) + self.gridLayout_left.setRowStretch(6, 2) + self.horizontalLayout.addLayout(self.gridLayout_left) self.verticalLayout_canvas = QtWidgets.QVBoxLayout() self.verticalLayout_canvas.setObjectName("verticalLayout_canvas") self.horizontalLayout.addLayout(self.verticalLayout_canvas) @@ -1136,6 +1148,8 @@ class Ui_MainWindow(object): def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "ECG_Label_Check")) + self.pushButton_outputLabel.setText(_translate("MainWindow", "导出标签")) + self.pushButton_append.setText(_translate("MainWindow", "片段合并")) self.groupBox_inputSetting.setTitle(_translate("MainWindow", "导入操作")) self.lineEdit_rootpath.setPlaceholderText(_translate("MainWindow", "数据根目录路径")) self.label_choose.setText(_translate("MainWindow", "数据和标签的序号选择:")) @@ -1211,7 +1225,6 @@ class Ui_MainWindow(object): self.label_5.setText(_translate("MainWindow", "最小间隔:")) self.lineEdit_findpeaks_min_interval.setText(_translate("MainWindow", "1000")) self.lineEdit_findpeaks_min_height.setText(_translate("MainWindow", "0.5")) - self.pushButton_outputLabel.setText(_translate("MainWindow", "导出标签")) self.groupBox_labelDisplay.setTitle(_translate("MainWindow", "标签")) self.groupBox_info.setTitle(_translate("MainWindow", "信息")) self.label_label2_length.setText(_translate("MainWindow", "0")) diff --git a/MainWindow.ui b/MainWindow.ui index 768bbf7..a1ee24c 100644 --- a/MainWindow.ui +++ b/MainWindow.ui @@ -18,8 +18,46 @@ <item row="0" column="0" rowspan="3" colspan="2"> <layout class="QHBoxLayout" name="horizontalLayout" stretch="5,20,3"> <item> - <layout class="QVBoxLayout" name="verticalLayout_left" stretch="10,2,6,2,0,0,2"> - <item> + <layout class="QGridLayout" name="gridLayout_left" rowstretch="10,2,6,2,0,0,2"> + <item row="6" column="1"> + <widget class="QPushButton" name="pushButton_outputLabel"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="font"> + <font> + <family>黑体</family> + <pointsize>14</pointsize> + </font> + </property> + <property name="text"> + <string>导出标签</string> + </property> + </widget> + </item> + <item row="6" column="0"> + <widget class="QPushButton" name="pushButton_append"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="font"> + <font> + <family>黑体</family> + <pointsize>14</pointsize> + </font> + </property> + <property name="text"> + <string>片段合并</string> + </property> + </widget> + </item> + <item row="0" column="0" colspan="2"> <widget class="QGroupBox" name="groupBox_inputSetting"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> @@ -849,20 +887,7 @@ </layout> </widget> </item> - <item> - <spacer name="verticalSpacer_4"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - <item> + <item row="2" column="0" colspan="2"> <widget class="QGroupBox" name="groupBox_autoplay"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> @@ -1444,20 +1469,7 @@ </layout> </widget> </item> - <item> - <spacer name="verticalSpacer_6"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - <item> + <item row="4" column="0" colspan="2"> <widget class="QGroupBox" name="groupBox_findpeaks_options"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> @@ -1560,7 +1572,20 @@ </layout> </widget> </item> - <item> + <item row="1" column="0" colspan="2"> + <spacer name="verticalSpacer_4"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + <item row="5" column="0" colspan="2"> <spacer name="verticalSpacer_5"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -1573,24 +1598,18 @@ </property> </spacer> </item> - <item> - <widget class="QPushButton" name="pushButton_outputLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + <item row="3" column="0" colspan="2"> + <spacer name="verticalSpacer_6"> + <property name="orientation"> + <enum>Qt::Vertical</enum> </property> - <property name="font"> - <font> - <family>黑体</family> - <pointsize>14</pointsize> - </font> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> </property> - <property name="text"> - <string>导出标签</string> - </property> - </widget> + </spacer> </item> </layout> </item> diff --git a/ecg_label_check.py b/ecg_label_check.py index 21944ec..8d0927d 100644 --- a/ecg_label_check.py +++ b/ecg_label_check.py @@ -113,6 +113,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.pushButton_label1path_open.clicked.connect(self.slot_btn_selectPath) self.pushButton_label2path_open.clicked.connect(self.slot_btn_selectPath) self.pushButton_dataInput.clicked.connect(self.slot_btn_dataInput) + self.pushButton_append.clicked.connect(self.slot_btn_append) self.pushButton_outputLabel.clicked.connect(self.slot_btn_outputLabel) self.comboBox_choose.currentTextChanged.connect(self.slot_comboBox_textChanged) self.radioButton_inputMode_auto.clicked.connect(self.slot_radioBtn_inputMode_auto) @@ -152,6 +153,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.radioButton_data1_fillterMode.setChecked(True) self.radioButton_data2_fillterMode.setChecked(True) self.radioButton_move_preset_1.setChecked(True) + self.pushButton_append.setEnabled(False) self.pushButton_outputLabel.setEnabled(False) self.figToolbar.action_Label_Single.setEnabled(False) self.figToolbar.action_Label_Multiple.setEnabled(False) @@ -360,6 +362,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): # 更新界面 self.groupBox_inputSetting.setEnabled(False) self.groupBox_autoplay.setEnabled(True) + self.pushButton_append.setEnabled(True) self.pushButton_outputLabel.setEnabled(True) self.figToolbar.action_Label_Single.setEnabled(True) self.figToolbar.action_Label_Multiple.setEnabled(True) @@ -570,6 +573,24 @@ class MainWindow(QMainWindow, Ui_MainWindow): info(f"Jumped to x_axis: {str(int(x))}.") self.textBrowser_update(f"操作:跳转到x坐标: {str(int(x))}") + def slot_btn_append(self): + # TODO + reply = QMessageBox.question(self, "警告:确认操作", f"你正在执行<片段合并>,请确保需要被合并的片段已完成标注工作。你确定要将片段合并,并将结果保存到{self.lineEdit_resample1000Hz_save_path.text()}?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) + if reply == QMessageBox.Yes: + for idx in range(len(self.ecg_seq)): + DataFrame(self.ecg_seq[idx].reshape(-1)).to_csv( + str(Path(self.lineEdit_detect_Rpeaks_save_path.text()) / f"{idx + 1}ecg.txt"), index=False, + header=None) + DataFrame(self.R_peak_seq[idx].reshape(-1)).to_csv( + str(Path(self.lineEdit_detect_Rpeaks_save_path.text()) / f"{idx + 1}Rpeak.txt"), index=False, + header=None) + info(f"Saved Data {idx + 1} to Directory {self.lineEdit_detect_Rpeaks_save_path.text()}.") + self.textBrowser_update( + f"提示:保存片段{idx + 1}成功至文件夹{self.lineEdit_detect_Rpeaks_save_path.text()}") + self.msgBox.setText(f"保存成功至{self.lineEdit_detect_Rpeaks_save_path.text()}") + self.msgBox.setIcon(QMessageBox.Information) + self.msgBox.exec() + def slot_btn_outputLabel(self): np.savetxt(Path(self.lineEdit_savepath.text()), self.label2, fmt='%d', newline='\n') info(f"Manually Saved Data to: {str(Path(self.lineEdit_savepath.text()))}.")