删除了所有使用PSG_label的操作,所有标签将仅使用BCG_label进行操作。PSG_label_2_BCG_label在之后可整合到主程序中。

This commit is contained in:
Yorusora 2025-01-09 13:59:03 +08:00
parent 4108c18f12
commit f5386bb0b3
4 changed files with 483 additions and 580 deletions

View File

@ -255,80 +255,6 @@ class Ui_MainWindow(object):
self.groupBox_4.setObjectName("groupBox_4") self.groupBox_4.setObjectName("groupBox_4")
self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_4) self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_4)
self.gridLayout_2.setObjectName("gridLayout_2") self.gridLayout_2.setObjectName("gridLayout_2")
self.lineEdit_remark = QtWidgets.QLineEdit(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lineEdit_remark.sizePolicy().hasHeightForWidth())
self.lineEdit_remark.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.lineEdit_remark.setFont(font)
self.lineEdit_remark.setObjectName("lineEdit_remark")
self.gridLayout_2.addWidget(self.lineEdit_remark, 5, 2, 1, 3)
self.pushButton_left = QtWidgets.QPushButton(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.pushButton_left.sizePolicy().hasHeightForWidth())
self.pushButton_left.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.pushButton_left.setFont(font)
self.pushButton_left.setObjectName("pushButton_left")
self.gridLayout_2.addWidget(self.pushButton_left, 15, 0, 1, 1)
self.lineEdit_correctStart = QtWidgets.QLineEdit(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lineEdit_correctStart.sizePolicy().hasHeightForWidth())
self.lineEdit_correctStart.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.lineEdit_correctStart.setFont(font)
self.lineEdit_correctStart.setObjectName("lineEdit_correctStart")
self.gridLayout_2.addWidget(self.lineEdit_correctStart, 7, 2, 1, 3)
self.label_correctStart = QtWidgets.QLabel(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_correctStart.sizePolicy().hasHeightForWidth())
self.label_correctStart.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.label_correctStart.setFont(font)
self.label_correctStart.setObjectName("label_correctStart")
self.gridLayout_2.addWidget(self.label_correctStart, 7, 0, 1, 1)
self.checkBox_examineLabeled = QtWidgets.QCheckBox(self.groupBox_4)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.checkBox_examineLabeled.setFont(font)
self.checkBox_examineLabeled.setObjectName("checkBox_examineLabeled")
self.gridLayout_2.addWidget(self.checkBox_examineLabeled, 0, 0, 1, 4)
self.label_quick_remark_input = QtWidgets.QLabel(self.groupBox_4)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.label_quick_remark_input.setFont(font)
self.label_quick_remark_input.setObjectName("label_quick_remark_input")
self.gridLayout_2.addWidget(self.label_quick_remark_input, 6, 0, 1, 1)
self.lineEdit_correctEnd = QtWidgets.QLineEdit(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lineEdit_correctEnd.sizePolicy().hasHeightForWidth())
self.lineEdit_correctEnd.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.lineEdit_correctEnd.setFont(font)
self.lineEdit_correctEnd.setObjectName("lineEdit_correctEnd")
self.gridLayout_2.addWidget(self.lineEdit_correctEnd, 9, 2, 1, 3)
self.label_correctEnd = QtWidgets.QLabel(self.groupBox_4) self.label_correctEnd = QtWidgets.QLabel(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
@ -340,7 +266,84 @@ class Ui_MainWindow(object):
font.setPointSize(14) font.setPointSize(14)
self.label_correctEnd.setFont(font) self.label_correctEnd.setFont(font)
self.label_correctEnd.setObjectName("label_correctEnd") self.label_correctEnd.setObjectName("label_correctEnd")
self.gridLayout_2.addWidget(self.label_correctEnd, 9, 0, 1, 1) self.gridLayout_2.addWidget(self.label_correctEnd, 8, 0, 1, 1)
self.lineEdit_correctEnd = QtWidgets.QLineEdit(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lineEdit_correctEnd.sizePolicy().hasHeightForWidth())
self.lineEdit_correctEnd.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.lineEdit_correctEnd.setFont(font)
self.lineEdit_correctEnd.setObjectName("lineEdit_correctEnd")
self.gridLayout_2.addWidget(self.lineEdit_correctEnd, 8, 2, 1, 3)
self.horizontalLayout_12 = QtWidgets.QHBoxLayout()
self.horizontalLayout_12.setObjectName("horizontalLayout_12")
self.label_score = QtWidgets.QLabel(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_score.sizePolicy().hasHeightForWidth())
self.label_score.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.label_score.setFont(font)
self.label_score.setObjectName("label_score")
self.horizontalLayout_12.addWidget(self.label_score)
self.radioButton_1_class = QtWidgets.QRadioButton(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.radioButton_1_class.sizePolicy().hasHeightForWidth())
self.radioButton_1_class.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.radioButton_1_class.setFont(font)
self.radioButton_1_class.setObjectName("radioButton_1_class")
self.horizontalLayout_12.addWidget(self.radioButton_1_class)
self.radioButton_2_class = QtWidgets.QRadioButton(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.radioButton_2_class.sizePolicy().hasHeightForWidth())
self.radioButton_2_class.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.radioButton_2_class.setFont(font)
self.radioButton_2_class.setObjectName("radioButton_2_class")
self.horizontalLayout_12.addWidget(self.radioButton_2_class)
self.radioButton_3_class = QtWidgets.QRadioButton(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.radioButton_3_class.sizePolicy().hasHeightForWidth())
self.radioButton_3_class.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.radioButton_3_class.setFont(font)
self.radioButton_3_class.setObjectName("radioButton_3_class")
self.horizontalLayout_12.addWidget(self.radioButton_3_class)
self.gridLayout_2.addLayout(self.horizontalLayout_12, 3, 0, 1, 5)
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_2.addItem(spacerItem3, 14, 1, 1, 1)
self.lineEdit_correctStart = QtWidgets.QLineEdit(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lineEdit_correctStart.sizePolicy().hasHeightForWidth())
self.lineEdit_correctStart.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.lineEdit_correctStart.setFont(font)
self.lineEdit_correctStart.setObjectName("lineEdit_correctStart")
self.gridLayout_2.addWidget(self.lineEdit_correctStart, 6, 2, 1, 3)
self.label_BCG_event = QtWidgets.QLabel(self.groupBox_4) self.label_BCG_event = QtWidgets.QLabel(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
@ -356,14 +359,47 @@ class Ui_MainWindow(object):
self.label_BCG_event.setText("") self.label_BCG_event.setText("")
self.label_BCG_event.setAlignment(QtCore.Qt.AlignCenter) self.label_BCG_event.setAlignment(QtCore.Qt.AlignCenter)
self.label_BCG_event.setObjectName("label_BCG_event") self.label_BCG_event.setObjectName("label_BCG_event")
self.gridLayout_2.addWidget(self.label_BCG_event, 2, 0, 1, 5) self.gridLayout_2.addWidget(self.label_BCG_event, 1, 0, 1, 5)
self.pushButton_quick_remark_input_waitingForTalk = QtWidgets.QPushButton(self.groupBox_4) self.pushButton_quick_remark_input_waitingForTalk = QtWidgets.QPushButton(self.groupBox_4)
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman") font.setFamily("Times New Roman")
font.setPointSize(14) font.setPointSize(14)
self.pushButton_quick_remark_input_waitingForTalk.setFont(font) self.pushButton_quick_remark_input_waitingForTalk.setFont(font)
self.pushButton_quick_remark_input_waitingForTalk.setObjectName("pushButton_quick_remark_input_waitingForTalk") self.pushButton_quick_remark_input_waitingForTalk.setObjectName("pushButton_quick_remark_input_waitingForTalk")
self.gridLayout_2.addWidget(self.pushButton_quick_remark_input_waitingForTalk, 6, 2, 1, 3) self.gridLayout_2.addWidget(self.pushButton_quick_remark_input_waitingForTalk, 5, 2, 1, 3)
self.pushButton_right = QtWidgets.QPushButton(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.pushButton_right.sizePolicy().hasHeightForWidth())
self.pushButton_right.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.pushButton_right.setFont(font)
self.pushButton_right.setObjectName("pushButton_right")
self.gridLayout_2.addWidget(self.pushButton_right, 15, 0, 1, 1)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout_2.addItem(spacerItem4, 15, 1, 1, 1)
self.label_remark = QtWidgets.QLabel(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_remark.sizePolicy().hasHeightForWidth())
self.label_remark.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.label_remark.setFont(font)
self.label_remark.setObjectName("label_remark")
self.gridLayout_2.addWidget(self.label_remark, 4, 0, 1, 1)
self.label_quick_remark_input = QtWidgets.QLabel(self.groupBox_4)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.label_quick_remark_input.setFont(font)
self.label_quick_remark_input.setObjectName("label_quick_remark_input")
self.gridLayout_2.addWidget(self.label_quick_remark_input, 5, 0, 1, 1)
self.horizontalLayout_radioButton = QtWidgets.QHBoxLayout() self.horizontalLayout_radioButton = QtWidgets.QHBoxLayout()
self.horizontalLayout_radioButton.setObjectName("horizontalLayout_radioButton") self.horizontalLayout_radioButton.setObjectName("horizontalLayout_radioButton")
self.label_events = QtWidgets.QLabel(self.groupBox_4) self.label_events = QtWidgets.QLabel(self.groupBox_4)
@ -426,98 +462,38 @@ class Ui_MainWindow(object):
self.radioButton_HPY.setFont(font) self.radioButton_HPY.setFont(font)
self.radioButton_HPY.setObjectName("radioButton_HPY") self.radioButton_HPY.setObjectName("radioButton_HPY")
self.horizontalLayout_radioButton.addWidget(self.radioButton_HPY) self.horizontalLayout_radioButton.addWidget(self.radioButton_HPY)
self.gridLayout_2.addLayout(self.horizontalLayout_radioButton, 3, 0, 1, 5) self.gridLayout_2.addLayout(self.horizontalLayout_radioButton, 2, 0, 1, 5)
self.label_PSG_event = QtWidgets.QLabel(self.groupBox_4) self.lineEdit_remark = QtWidgets.QLineEdit(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_PSG_event.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.lineEdit_remark.sizePolicy().hasHeightForWidth())
self.label_PSG_event.setSizePolicy(sizePolicy) self.lineEdit_remark.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(12)
font.setBold(False)
font.setWeight(50)
self.label_PSG_event.setFont(font)
self.label_PSG_event.setText("")
self.label_PSG_event.setAlignment(QtCore.Qt.AlignCenter)
self.label_PSG_event.setObjectName("label_PSG_event")
self.gridLayout_2.addWidget(self.label_PSG_event, 1, 0, 1, 5)
self.label_remark = QtWidgets.QLabel(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_remark.sizePolicy().hasHeightForWidth())
self.label_remark.setSizePolicy(sizePolicy)
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman") font.setFamily("Times New Roman")
font.setPointSize(14) font.setPointSize(14)
self.label_remark.setFont(font) self.lineEdit_remark.setFont(font)
self.label_remark.setObjectName("label_remark") self.lineEdit_remark.setObjectName("lineEdit_remark")
self.gridLayout_2.addWidget(self.label_remark, 5, 0, 1, 1) self.gridLayout_2.addWidget(self.lineEdit_remark, 4, 2, 1, 3)
self.pushButton_right = QtWidgets.QPushButton(self.groupBox_4) self.pushButton_left = QtWidgets.QPushButton(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.pushButton_right.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.pushButton_left.sizePolicy().hasHeightForWidth())
self.pushButton_right.setSizePolicy(sizePolicy) self.pushButton_left.setSizePolicy(sizePolicy)
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman") font.setFamily("Times New Roman")
font.setPointSize(14) font.setPointSize(14)
self.pushButton_right.setFont(font) self.pushButton_left.setFont(font)
self.pushButton_right.setObjectName("pushButton_right") self.pushButton_left.setObjectName("pushButton_left")
self.gridLayout_2.addWidget(self.pushButton_right, 16, 0, 1, 1) self.gridLayout_2.addWidget(self.pushButton_left, 14, 0, 1, 1)
self.horizontalLayout_12 = QtWidgets.QHBoxLayout() self.checkBox_examineLabeled = QtWidgets.QCheckBox(self.groupBox_4)
self.horizontalLayout_12.setObjectName("horizontalLayout_12")
self.label_score = QtWidgets.QLabel(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_score.sizePolicy().hasHeightForWidth())
self.label_score.setSizePolicy(sizePolicy)
font = QtGui.QFont() font = QtGui.QFont()
font.setFamily("Times New Roman") font.setFamily("Times New Roman")
font.setPointSize(14) font.setPointSize(14)
self.label_score.setFont(font) self.checkBox_examineLabeled.setFont(font)
self.label_score.setObjectName("label_score") self.checkBox_examineLabeled.setObjectName("checkBox_examineLabeled")
self.horizontalLayout_12.addWidget(self.label_score) self.gridLayout_2.addWidget(self.checkBox_examineLabeled, 0, 0, 1, 4)
self.radioButton_1_class = QtWidgets.QRadioButton(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.radioButton_1_class.sizePolicy().hasHeightForWidth())
self.radioButton_1_class.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.radioButton_1_class.setFont(font)
self.radioButton_1_class.setObjectName("radioButton_1_class")
self.horizontalLayout_12.addWidget(self.radioButton_1_class)
self.radioButton_2_class = QtWidgets.QRadioButton(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.radioButton_2_class.sizePolicy().hasHeightForWidth())
self.radioButton_2_class.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.radioButton_2_class.setFont(font)
self.radioButton_2_class.setObjectName("radioButton_2_class")
self.horizontalLayout_12.addWidget(self.radioButton_2_class)
self.radioButton_3_class = QtWidgets.QRadioButton(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.radioButton_3_class.sizePolicy().hasHeightForWidth())
self.radioButton_3_class.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.radioButton_3_class.setFont(font)
self.radioButton_3_class.setObjectName("radioButton_3_class")
self.horizontalLayout_12.addWidget(self.radioButton_3_class)
self.gridLayout_2.addLayout(self.horizontalLayout_12, 4, 0, 1, 5)
self.pushButton_confirmLabel = QtWidgets.QPushButton(self.groupBox_4) self.pushButton_confirmLabel = QtWidgets.QPushButton(self.groupBox_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
@ -529,11 +505,19 @@ class Ui_MainWindow(object):
font.setPointSize(14) font.setPointSize(14)
self.pushButton_confirmLabel.setFont(font) self.pushButton_confirmLabel.setFont(font)
self.pushButton_confirmLabel.setObjectName("pushButton_confirmLabel") self.pushButton_confirmLabel.setObjectName("pushButton_confirmLabel")
self.gridLayout_2.addWidget(self.pushButton_confirmLabel, 15, 2, 2, 3) self.gridLayout_2.addWidget(self.pushButton_confirmLabel, 14, 2, 2, 3)
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.label_correctStart = QtWidgets.QLabel(self.groupBox_4)
self.gridLayout_2.addItem(spacerItem3, 16, 1, 1, 1) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0)
self.gridLayout_2.addItem(spacerItem4, 15, 1, 1, 1) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_correctStart.sizePolicy().hasHeightForWidth())
self.label_correctStart.setSizePolicy(sizePolicy)
font = QtGui.QFont()
font.setFamily("Times New Roman")
font.setPointSize(14)
self.label_correctStart.setFont(font)
self.label_correctStart.setObjectName("label_correctStart")
self.gridLayout_2.addWidget(self.label_correctStart, 6, 0, 1, 1)
self.verticalLayout_left.addWidget(self.groupBox_4) self.verticalLayout_left.addWidget(self.groupBox_4)
spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) spacerItem5 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_left.addItem(spacerItem5) self.verticalLayout_left.addItem(spacerItem5)
@ -739,14 +723,20 @@ class Ui_MainWindow(object):
self.lineEdit_back_add_second.setText(_translate("MainWindow", "60")) self.lineEdit_back_add_second.setText(_translate("MainWindow", "60"))
self.lineEdit_back_add_second.setPlaceholderText(_translate("MainWindow", "信号显示事件后多少秒")) self.lineEdit_back_add_second.setPlaceholderText(_translate("MainWindow", "信号显示事件后多少秒"))
self.groupBox_4.setTitle(_translate("MainWindow", "打标操作")) self.groupBox_4.setTitle(_translate("MainWindow", "打标操作"))
self.pushButton_left.setText(_translate("MainWindow", "上一个事件(A)"))
self.pushButton_left.setShortcut(_translate("MainWindow", "A"))
self.label_correctStart.setText(_translate("MainWindow", "修正后起始时间(s)"))
self.checkBox_examineLabeled.setText(_translate("MainWindow", "仅检查未确定打标参数的事件"))
self.label_quick_remark_input.setText(_translate("MainWindow", "快速备注输入"))
self.label_correctEnd.setText(_translate("MainWindow", "修正后终止时间(s)")) self.label_correctEnd.setText(_translate("MainWindow", "修正后终止时间(s)"))
self.label_score.setText(_translate("MainWindow", "标签类型"))
self.radioButton_1_class.setText(_translate("MainWindow", "一类(U)"))
self.radioButton_1_class.setShortcut(_translate("MainWindow", "U"))
self.radioButton_2_class.setText(_translate("MainWindow", "二类(I)"))
self.radioButton_2_class.setShortcut(_translate("MainWindow", "I"))
self.radioButton_3_class.setText(_translate("MainWindow", "删除(O)"))
self.radioButton_3_class.setShortcut(_translate("MainWindow", "O"))
self.pushButton_quick_remark_input_waitingForTalk.setText(_translate("MainWindow", "待讨论(J)")) self.pushButton_quick_remark_input_waitingForTalk.setText(_translate("MainWindow", "待讨论(J)"))
self.pushButton_quick_remark_input_waitingForTalk.setShortcut(_translate("MainWindow", "J")) self.pushButton_quick_remark_input_waitingForTalk.setShortcut(_translate("MainWindow", "J"))
self.pushButton_right.setText(_translate("MainWindow", "下一个事件(D)"))
self.pushButton_right.setShortcut(_translate("MainWindow", "D"))
self.label_remark.setText(_translate("MainWindow", "备注"))
self.label_quick_remark_input.setText(_translate("MainWindow", "快速备注输入"))
self.label_events.setText(_translate("MainWindow", "事件类型")) self.label_events.setText(_translate("MainWindow", "事件类型"))
self.radioButton_OSA.setText(_translate("MainWindow", "OSA")) self.radioButton_OSA.setText(_translate("MainWindow", "OSA"))
self.radioButton_OSA.setShortcut(_translate("MainWindow", "1")) self.radioButton_OSA.setShortcut(_translate("MainWindow", "1"))
@ -756,17 +746,11 @@ class Ui_MainWindow(object):
self.radioButton_MSA.setShortcut(_translate("MainWindow", "3")) self.radioButton_MSA.setShortcut(_translate("MainWindow", "3"))
self.radioButton_HPY.setText(_translate("MainWindow", "HPY")) self.radioButton_HPY.setText(_translate("MainWindow", "HPY"))
self.radioButton_HPY.setShortcut(_translate("MainWindow", "4")) self.radioButton_HPY.setShortcut(_translate("MainWindow", "4"))
self.label_remark.setText(_translate("MainWindow", "备注")) self.pushButton_left.setText(_translate("MainWindow", "上一个事件(A)"))
self.pushButton_right.setText(_translate("MainWindow", "下一个事件(D)")) self.pushButton_left.setShortcut(_translate("MainWindow", "A"))
self.pushButton_right.setShortcut(_translate("MainWindow", "D")) self.checkBox_examineLabeled.setText(_translate("MainWindow", "仅检查未确定打标参数的事件"))
self.label_score.setText(_translate("MainWindow", "标签类型"))
self.radioButton_1_class.setText(_translate("MainWindow", "一类(U)"))
self.radioButton_1_class.setShortcut(_translate("MainWindow", "U"))
self.radioButton_2_class.setText(_translate("MainWindow", "二类(I)"))
self.radioButton_2_class.setShortcut(_translate("MainWindow", "I"))
self.radioButton_3_class.setText(_translate("MainWindow", "删除(O)"))
self.radioButton_3_class.setShortcut(_translate("MainWindow", "O"))
self.pushButton_confirmLabel.setText(_translate("MainWindow", "确定打标参数(S)")) self.pushButton_confirmLabel.setText(_translate("MainWindow", "确定打标参数(S)"))
self.label_correctStart.setText(_translate("MainWindow", "修正后起始时间(s)"))
self.groupBox_5.setTitle(_translate("MainWindow", "逐帧检查")) self.groupBox_5.setTitle(_translate("MainWindow", "逐帧检查"))
self.pushButton_next10s.setText(_translate("MainWindow", "+10s")) self.pushButton_next10s.setText(_translate("MainWindow", "+10s"))
self.pushButton_previous10s.setText(_translate("MainWindow", "-10s")) self.pushButton_previous10s.setText(_translate("MainWindow", "-10s"))

View File

@ -437,122 +437,7 @@
<string>打标操作</string> <string>打标操作</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_2" columnstretch="0,0,0,0,0"> <layout class="QGridLayout" name="gridLayout_2" columnstretch="0,0,0,0,0">
<item row="5" column="2" colspan="3"> <item row="8" column="0">
<widget class="QLineEdit" name="lineEdit_remark">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
</widget>
</item>
<item row="15" column="0">
<widget class="QPushButton" name="pushButton_left">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>上一个事件(A)</string>
</property>
<property name="shortcut">
<string>A</string>
</property>
</widget>
</item>
<item row="7" column="2" colspan="3">
<widget class="QLineEdit" name="lineEdit_correctStart">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_correctStart">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>修正后起始时间(s)</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="4">
<widget class="QCheckBox" name="checkBox_examineLabeled">
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>仅检查未确定打标参数的事件</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_quick_remark_input">
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>快速备注输入</string>
</property>
</widget>
</item>
<item row="9" column="2" colspan="3">
<widget class="QLineEdit" name="lineEdit_correctEnd">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_correctEnd"> <widget class="QLabel" name="label_correctEnd">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@ -571,7 +456,141 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0" colspan="5"> <item row="8" column="2" colspan="3">
<widget class="QLineEdit" name="lineEdit_correctEnd">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
</widget>
</item>
<item row="3" column="0" colspan="5">
<layout class="QHBoxLayout" name="horizontalLayout_12">
<item>
<widget class="QLabel" name="label_score">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>标签类型</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_1_class">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>一类(U)</string>
</property>
<property name="shortcut">
<string>U</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_2_class">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>二类(I)</string>
</property>
<property name="shortcut">
<string>I</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_3_class">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>删除(O)</string>
</property>
<property name="shortcut">
<string>O</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="14" column="1">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="6" column="2" colspan="3">
<widget class="QLineEdit" name="lineEdit_correctStart">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
</widget>
</item>
<item row="1" column="0" colspan="5">
<widget class="QLabel" name="label_BCG_event"> <widget class="QLabel" name="label_BCG_event">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
@ -595,7 +614,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="2" colspan="3"> <item row="5" column="2" colspan="3">
<widget class="QPushButton" name="pushButton_quick_remark_input_waitingForTalk"> <widget class="QPushButton" name="pushButton_quick_remark_input_waitingForTalk">
<property name="font"> <property name="font">
<font> <font>
@ -611,7 +630,74 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0" colspan="5"> <item row="15" column="0">
<widget class="QPushButton" name="pushButton_right">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>下一个事件(D)</string>
</property>
<property name="shortcut">
<string>D</string>
</property>
</widget>
</item>
<item row="15" column="1">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_remark">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>备注</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_quick_remark_input">
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>快速备注输入</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="5">
<layout class="QHBoxLayout" name="horizontalLayout_radioButton"> <layout class="QHBoxLayout" name="horizontalLayout_radioButton">
<item> <item>
<widget class="QLabel" name="label_events"> <widget class="QLabel" name="label_events">
@ -722,34 +808,10 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="1" column="0" colspan="5"> <item row="4" column="2" colspan="3">
<widget class="QLabel" name="label_PSG_event"> <widget class="QLineEdit" name="lineEdit_remark">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>12</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_remark">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
@ -760,13 +822,10 @@
<pointsize>14</pointsize> <pointsize>14</pointsize>
</font> </font>
</property> </property>
<property name="text">
<string>备注</string>
</property>
</widget> </widget>
</item> </item>
<item row="16" column="0"> <item row="14" column="0">
<widget class="QPushButton" name="pushButton_right"> <widget class="QPushButton" name="pushButton_left">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>
@ -780,103 +839,27 @@
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string>下一个事件(D)</string> <string>上一个事件(A)</string>
</property> </property>
<property name="shortcut"> <property name="shortcut">
<string>D</string> <string>A</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0" colspan="5"> <item row="0" column="0" colspan="4">
<layout class="QHBoxLayout" name="horizontalLayout_12"> <widget class="QCheckBox" name="checkBox_examineLabeled">
<item> <property name="font">
<widget class="QLabel" name="label_score"> <font>
<property name="sizePolicy"> <family>Times New Roman</family>
<sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <pointsize>14</pointsize>
<horstretch>0</horstretch> </font>
<verstretch>0</verstretch> </property>
</sizepolicy> <property name="text">
</property> <string>仅检查未确定打标参数的事件</string>
<property name="font"> </property>
<font> </widget>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>标签类型</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_1_class">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>一类(U)</string>
</property>
<property name="shortcut">
<string>U</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_2_class">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>二类(I)</string>
</property>
<property name="shortcut">
<string>I</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_3_class">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="font">
<font>
<family>Times New Roman</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>删除(O)</string>
</property>
<property name="shortcut">
<string>O</string>
</property>
</widget>
</item>
</layout>
</item> </item>
<item row="15" column="2" rowspan="2" colspan="3"> <item row="14" column="2" rowspan="2" colspan="3">
<widget class="QPushButton" name="pushButton_confirmLabel"> <widget class="QPushButton" name="pushButton_confirmLabel">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred"> <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
@ -895,31 +878,24 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="16" column="1"> <item row="6" column="0">
<spacer name="horizontalSpacer"> <widget class="QLabel" name="label_correctStart">
<property name="orientation"> <property name="sizePolicy">
<enum>Qt::Horizontal</enum> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="font">
<size> <font>
<width>40</width> <family>Times New Roman</family>
<height>20</height> <pointsize>14</pointsize>
</size> </font>
</property> </property>
</spacer> <property name="text">
</item> <string>修正后起始时间(s)</string>
<item row="15" column="1">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property> </property>
<property name="sizeHint" stdset="0"> </widget>
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item> </item>
</layout> </layout>
</widget> </widget>

View File

@ -157,12 +157,11 @@ class MainWindow(QMainWindow, Ui_MainWindow):
if self.dir_path: if self.dir_path:
logging.info("Loading Data Path...") logging.info("Loading Data Path...")
self.PSG_Data_Path = Path(os.path.join(self.dir_path, "PSG")) self.PSG_Data_Path = Path(os.path.join(self.dir_path, "PSG"))
self.PSG_Label_Path = Path(os.path.join(self.dir_path, "PSG_label"))
self.BCG_Data_Path = Path(os.path.join(self.dir_path, "BCG")) self.BCG_Data_Path = Path(os.path.join(self.dir_path, "BCG"))
self.BCG_Label_Path = Path(os.path.join(self.dir_path, "BCG_label")) self.BCG_Label_Path = Path(os.path.join(self.dir_path, "BCG_label"))
self.Artifact_Label_Path = Path(os.path.join(self.dir_path, "Artifact_label")) self.Artifact_Label_Path = Path(os.path.join(self.dir_path, "Artifact_label"))
self.Artifact_Offset_Path = Path(os.path.join(self.dir_path, "Artifact_label", "20220421Artifact_offset_value.xlsx")) self.Artifact_Offset_Path = Path(os.path.join(self.dir_path, "Artifact_label", "20220421Artifact_offset_value.xlsx"))
if self.PSG_Data_Path.exists() and self.PSG_Label_Path.exists() and self.BCG_Data_Path.exists() and self.BCG_Label_Path.exists() and self.Artifact_Label_Path.exists() and self.Artifact_Label_Path.exists(): if self.PSG_Data_Path.exists() and self.BCG_Data_Path.exists() and self.BCG_Label_Path.exists() and self.Artifact_Label_Path.exists() and self.Artifact_Label_Path.exists():
sampIDs = os.listdir(self.BCG_Data_Path) sampIDs = os.listdir(self.BCG_Data_Path)
sampID_for_comboBox = [] sampID_for_comboBox = []
for sampID in sampIDs: for sampID in sampIDs:
@ -171,7 +170,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
bcg_path = self.BCG_Data_Path / f"{sampID}samp.npy" bcg_path = self.BCG_Data_Path / f"{sampID}samp.npy"
ecg_path = self.PSG_Data_Path / f"A{str(sampID).rjust(7, '0')}.edf" ecg_path = self.PSG_Data_Path / f"A{str(sampID).rjust(7, '0')}.edf"
bcg_label_path = self.BCG_Label_Path / f"export{sampID}_all.csv" bcg_label_path = self.BCG_Label_Path / f"export{sampID}_all.csv"
ecg_label_path = self.PSG_Label_Path / f"export{sampID}.csv"
if not bcg_path.exists(): if not bcg_path.exists():
logging.error(f"Can't find {bcg_path}!") logging.error(f"Can't find {bcg_path}!")
self.msgBox.setText(f"找不到数据{bcg_path}") self.msgBox.setText(f"找不到数据{bcg_path}")
@ -190,12 +188,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.msgBox.setIcon(QMessageBox.Critical) self.msgBox.setIcon(QMessageBox.Critical)
self.msgBox.exec() self.msgBox.exec()
return return
if not ecg_label_path.exists():
logging.error(f"Can't find {ecg_label_path}!")
self.msgBox.setText(f"找不到数据{ecg_label_path}")
self.msgBox.setIcon(QMessageBox.Critical)
self.msgBox.exec()
return
self.comboBox_sampID.setEnabled(True) self.comboBox_sampID.setEnabled(True)
self.lineEdit_start_bcg_index.setEnabled(True) self.lineEdit_start_bcg_index.setEnabled(True)
self.comboBox_sampID.addItems(sampID_for_comboBox) self.comboBox_sampID.addItems(sampID_for_comboBox)
@ -307,7 +299,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.msgBox.setIcon(QMessageBox.Information) self.msgBox.setIcon(QMessageBox.Information)
self.msgBox.exec() self.msgBox.exec()
self.pd.to_csv(Path(os.path.join(self.BCG_Label_Path, f"export{self.comboBox_sampID.currentText()}_all.csv")), mode='w', index=None, encoding="gbk") self.pd.to_csv(Path(os.path.join(self.BCG_Label_Path, f"export{self.comboBox_sampID.currentText()}_all.csv")), mode='w', index=None, encoding="gbk")
self.show_one_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second, back_add_second=self.back_add_second) self.show_one_event(self.plotEventIndex, front_add_second=self.front_add_second, back_add_second=self.back_add_second)
if not str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]) == "nan": if not str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]) == "nan":
self.lineEdit_remark.setText(str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"])) self.lineEdit_remark.setText(str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]))
else: else:
@ -329,7 +321,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
if self.checkBox_examineLabeled.isChecked() == True: if self.checkBox_examineLabeled.isChecked() == True:
while self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "isLabeled"] == 1 and self.plotEventIndex > self.start_bcg_index: while self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "isLabeled"] == 1 and self.plotEventIndex > self.start_bcg_index:
self.plotEventIndex = self.plotEventIndex - 1 self.plotEventIndex = self.plotEventIndex - 1
self.show_one_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second, self.show_one_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second) back_add_second=self.back_add_second)
if not str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]) == "nan": if not str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]) == "nan":
self.lineEdit_remark.setText(str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"])) self.lineEdit_remark.setText(str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]))
@ -362,7 +354,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
if self.checkBox_examineLabeled.isChecked() == True: if self.checkBox_examineLabeled.isChecked() == True:
while self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "isLabeled"] == 1 and self.plotEventIndex < len(self.bcg_event_label_filtered_df) - 1: while self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "isLabeled"] == 1 and self.plotEventIndex < len(self.bcg_event_label_filtered_df) - 1:
self.plotEventIndex = self.plotEventIndex + 1 self.plotEventIndex = self.plotEventIndex + 1
self.show_one_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second, self.show_one_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second) back_add_second=self.back_add_second)
if not str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]) == "nan": if not str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]) == "nan":
self.lineEdit_remark.setText(str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"])) self.lineEdit_remark.setText(str(self.pd.at[self.bcg_event_label_index_list[self.plotEventIndex], "remark"]))
@ -459,7 +451,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.textBrowser_update("操作向前10秒") self.textBrowser_update("操作向前10秒")
self.radioButton_OSA.setChecked(True) self.radioButton_OSA.setChecked(True)
self.time_move_count = self.time_move_count - 10 self.time_move_count = self.time_move_count - 10
self.show_new_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second, self.show_new_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second, time_move_count = self.time_move_count) back_add_second=self.back_add_second, time_move_count = self.time_move_count)
# -30s的槽函数 # -30s的槽函数
@ -469,7 +461,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.textBrowser_update("操作向前30秒") self.textBrowser_update("操作向前30秒")
self.radioButton_OSA.setChecked(True) self.radioButton_OSA.setChecked(True)
self.time_move_count = self.time_move_count - 30 self.time_move_count = self.time_move_count - 30
self.show_new_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second, self.show_new_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second, time_move_count = self.time_move_count) back_add_second=self.back_add_second, time_move_count = self.time_move_count)
# -60s的槽函数 # -60s的槽函数
@ -479,7 +471,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.textBrowser_update("操作向前60秒") self.textBrowser_update("操作向前60秒")
self.radioButton_OSA.setChecked(True) self.radioButton_OSA.setChecked(True)
self.time_move_count = self.time_move_count - 60 self.time_move_count = self.time_move_count - 60
self.show_new_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second, self.show_new_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second, time_move_count = self.time_move_count) back_add_second=self.back_add_second, time_move_count = self.time_move_count)
# +10s的槽函数 # +10s的槽函数
@ -489,7 +481,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.textBrowser_update("操作向后10秒") self.textBrowser_update("操作向后10秒")
self.radioButton_OSA.setChecked(True) self.radioButton_OSA.setChecked(True)
self.time_move_count = self.time_move_count + 10 self.time_move_count = self.time_move_count + 10
self.show_new_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second, self.show_new_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second, time_move_count = self.time_move_count) back_add_second=self.back_add_second, time_move_count = self.time_move_count)
# +30s的槽函数 # +30s的槽函数
@ -499,7 +491,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.textBrowser_update("操作向后30秒") self.textBrowser_update("操作向后30秒")
self.radioButton_OSA.setChecked(True) self.radioButton_OSA.setChecked(True)
self.time_move_count = self.time_move_count + 30 self.time_move_count = self.time_move_count + 30
self.show_new_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second, self.show_new_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second, time_move_count = self.time_move_count) back_add_second=self.back_add_second, time_move_count = self.time_move_count)
# +30s的槽函数 # +30s的槽函数
@ -509,7 +501,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.textBrowser_update("操作向后60秒") self.textBrowser_update("操作向后60秒")
self.radioButton_OSA.setChecked(True) self.radioButton_OSA.setChecked(True)
self.time_move_count = self.time_move_count + 60 self.time_move_count = self.time_move_count + 60
self.show_new_event(self.plotEventIndex, self.plotEventIndex, front_add_second=self.front_add_second, self.show_new_event(self.plotEventIndex, front_add_second=self.front_add_second,
back_add_second=self.back_add_second, time_move_count = self.time_move_count) back_add_second=self.back_add_second, time_move_count = self.time_move_count)
# +60s的槽函数 # +60s的槽函数
@ -603,20 +595,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.start_bcg_index = int(self.lineEdit_start_bcg_index.text()) self.start_bcg_index = int(self.lineEdit_start_bcg_index.text())
self.plotEventIndex = self.start_bcg_index self.plotEventIndex = self.start_bcg_index
self.ecg_start_time = None
# 用来显示颜色时按点匹配事件 # 用来显示颜色时按点匹配事件
self.ecg_event_label = None
self.bcg_event_label = None self.bcg_event_label = None
self.spo2_event_label = None
self.artifact_event_label = None self.artifact_event_label = None
# 仅包含关注暂停事件的列表 # 仅包含关注暂停事件的列表
self.ecg_event_label_filtered_df = None
self.bcg_event_label_filtered_df = None self.bcg_event_label_filtered_df = None
# 所有事件列表 # 所有事件列表
self.ecg_event_label_df = None
self.bcg_event_label_df = None self.bcg_event_label_df = None
# 各通道信号 # 各通道信号
@ -659,13 +645,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
signal_label = file.getSignalLabels() signal_label = file.getSignalLabels()
logging.debug(f"{self.sampNo} EDF file signal label : {signal_label}") logging.debug(f"{self.sampNo} EDF file signal label : {signal_label}")
self.ecg_start_time = file.getStartdatetime()
# 根据PSG记录长度生成事件表
self.ecg_event_label = np.zeros(
int(file.getFileDuration()) * self.frequency + self.extend_second * self.frequency)
self.spo2_event_label = np.zeros(
int(file.getFileDuration()) * self.frequency + self.extend_second * self.frequency)
# 打印PSG信息 # 打印PSG信息
file.file_info_long() file.file_info_long()
@ -723,56 +702,15 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def read_event(self): def read_event(self):
bcg_label_path = self.BCG_Label_Path / f"export{self.sampNo}_all.csv" bcg_label_path = self.BCG_Label_Path / f"export{self.sampNo}_all.csv"
ecg_label_path = self.PSG_Label_Path / f"export{self.sampNo}.csv"
if not bcg_label_path.exists(): if not bcg_label_path.exists():
logging.error(f"Can't find {bcg_label_path} !") logging.error(f"Can't find {bcg_label_path} !")
raise FileNotFoundError(f"Can't find {bcg_label_path} !") raise FileNotFoundError(f"Can't find {bcg_label_path} !")
if not ecg_label_path.exists():
logging.error(f"Can't find {ecg_label_path} !")
raise FileNotFoundError(f"Can't find {ecg_label_path} !")
df = pd.read_csv(ecg_label_path, encoding="gbk")
self.ecg_event_label_df = df
# 过滤不关注的事件
df2 = df[df["Event type"].isin(self.focus_event_list)]
# 根据epoch进行排列方便索引
df2 = df2.sort_values(by='Epoch')
self.ecg_event_label_filtered_df = df2
logging.info("Traversaling PSG events...")
self.textBrowser_update("提示正在遍历PSG事件")
for one_data in tqdm(df.index, ncols=80):
one_data = df.loc[one_data]
# 通过开始时间推算事件起始点与结束点
event_start_time = datetime.strptime(one_data["Date"] + " " + one_data["Time"], '%Y/%m/%d %H:%M:%S')
SP = (event_start_time - self.ecg_start_time).seconds
# 对括号进行切分避免Duration 20 (20) 这种带括号的问题
EP = int(SP + float(one_data["Duration"].split("(")[0]))
SP *= self.frequency
EP *= self.frequency
# 对事件重新编码并存到事件记录表中
if one_data["Event type"] == "Hypopnea":
self.ecg_event_label[SP:EP] = 1
elif one_data["Event type"] == "Central apnea":
self.ecg_event_label[SP:EP] = 2
elif one_data["Event type"] == "Obstructive apnea":
self.ecg_event_label[SP:EP] = 3
elif one_data["Event type"] == "Mixed apnea":
self.ecg_event_label[SP:EP] = 4
elif one_data["Event type"] == "Desaturation":
self.spo2_event_label[SP:EP] = 5
logging.info("Finished Traversal PSG events")
self.textBrowser_update("提示完成遍历PSG事件")
# 读取心晓事件 # 读取心晓事件
df = pd.read_csv(bcg_label_path, encoding="gbk") df = pd.read_csv(bcg_label_path, encoding="gbk")
df["new_start"] = df["new_start"].astype("int") df["Start"] = df["Start"].astype("int")
df["new_end"] = df["new_end"].astype("int") df["End"] = df["End"].astype("int")
self.bcg_event_label_df = df self.bcg_event_label_df = df
# 过滤不关注事件 # 过滤不关注事件
@ -784,8 +722,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.textBrowser_update("提示:正在遍历心晓事件") self.textBrowser_update("提示:正在遍历心晓事件")
for one_data in tqdm(df.index): for one_data in tqdm(df.index):
one_data = df.loc[one_data] one_data = df.loc[one_data]
SP = one_data["new_start"] * self.frequency SP = one_data["Start"] * self.frequency
EP = one_data["new_end"] * self.frequency EP = one_data["End"] * self.frequency
if one_data["Event type"] == "Hypopnea": if one_data["Event type"] == "Hypopnea":
self.bcg_event_label[SP:EP] = 1 self.bcg_event_label[SP:EP] = 1
@ -820,53 +758,32 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.artifact_event_label[SP:EP] = artifact_type self.artifact_event_label[SP:EP] = artifact_type
# assert len(self.ecg_event_label_filtered_df) == len(self.bcg_event_label_filtered_df), \ def show_one_event(self, bcg_index: int, front_add_second: int, back_add_second: int):
# f"PSG与心晓事件数量不一致, PSG事件数量{len(self.ecg_event_label_filtered_df)},
# 心晓事件数量{len(self.bcg_event_label_filtered_df)}"
def show_one_event(self, bcg_index: int, ecg_index: int, front_add_second: int, back_add_second: int):
""" """
:param bcg_index: 心晓事件在csv中行号 :param bcg_index: 心晓事件在csv中行号
:param ecg_index: PSG事件在csv中序号
:param front_add_second: 向前延伸时间 :param front_add_second: 向前延伸时间
:param back_add_second: 向后延伸时间 :param back_add_second: 向后延伸时间
:return: :return:
""" """
# 获取事件实际在csv文件中的序号 # 获取事件实际在csv文件中的序号
bcg_real_index = self.bcg_event_label_filtered_df.index[bcg_index], bcg_real_index = self.bcg_event_label_filtered_df.index[bcg_index],
ecg_real_index = self.ecg_event_label_filtered_df.index[ecg_index],
one_bcg_data = self.bcg_event_label_df.loc[bcg_real_index] one_bcg_data = self.bcg_event_label_df.loc[bcg_real_index]
one_ecg_data = self.ecg_event_label_df.loc[ecg_real_index]
# 获取ECG事件开始与结束时间
event_start_time = datetime.strptime(one_ecg_data["Date"] + " " + one_ecg_data["Time"], '%Y/%m/%d %H:%M:%S')
ecg_SP = (event_start_time - self.ecg_start_time).seconds
ecg_duration = int(float(str(one_ecg_data["Duration"]).split("(")[0]) + 0.5)
ecg_EP = ecg_SP + ecg_duration
# 获取BCG事件开始与结束时间 # 获取BCG事件开始与结束时间
bcg_SP = one_bcg_data["new_start"] bcg_SP = one_bcg_data["Start"]
bcg_EP = one_bcg_data["new_end"] bcg_EP = one_bcg_data["End"]
self.bcg_SP = bcg_SP self.bcg_SP = bcg_SP
self.bcg_EP = bcg_EP self.bcg_EP = bcg_EP
bcg_duration = bcg_EP - bcg_SP bcg_duration = bcg_EP - bcg_SP
logging.info(f"sampNo:{self.sampNo} " logging.info(f"sampNo:{self.sampNo} "
f"bcg[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}] " f"bcg[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}] "
f"ecg:[index:{ecg_index} epoch:{one_ecg_data['Epoch']} event:{one_ecg_data['Event type']}]") f"ecg:[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}]")
if one_bcg_data['Event type'] != one_ecg_data['Event type']:
logging.error(f"sampNo:{self.sampNo} PSG事件与心晓时间不一致请排查"
f"bcg[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}] "
f"ecg:[index:{ecg_index} epoch:{one_ecg_data['Epoch']} event:{one_ecg_data['Event type']}]")
raise ValueError()
self.lineEdit_correctStart.setText(str(self.bcg_SP)) self.lineEdit_correctStart.setText(str(self.bcg_SP))
self.lineEdit_correctEnd.setText(str(self.bcg_EP)) self.lineEdit_correctEnd.setText(str(self.bcg_EP))
# 进行向两边延展 # 进行向两边延展
ecg_SP = ecg_SP - front_add_second
ecg_EP = ecg_EP + back_add_second
bcg_SP = bcg_SP - front_add_second bcg_SP = bcg_SP - front_add_second
bcg_EP = bcg_EP + back_add_second bcg_EP = bcg_EP + back_add_second
@ -880,20 +797,20 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# 绘制 Flow1 # 绘制 Flow1
self.ax0 = self.figure.add_subplot(gs[0]) self.ax0 = self.figure.add_subplot(gs[0])
self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Flow T") self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Flow T")
# 绘制 Flow2 # 绘制 Flow2
self.ax1 = self.figure.add_subplot(gs[1], sharex=self.ax0) self.ax1 = self.figure.add_subplot(gs[1], sharex=self.ax0)
self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Flow P") self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Flow P")
self.ax2 = self.figure.add_subplot(gs[2], sharex=self.ax0) self.ax2 = self.figure.add_subplot(gs[2], sharex=self.ax0)
self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Effort Tho") self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Effort Tho")
self.ax3 = self.figure.add_subplot(gs[3], sharex=self.ax0) self.ax3 = self.figure.add_subplot(gs[3], sharex=self.ax0)
self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Effort Abd") self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Effort Abd")
self.ax4 = self.figure.add_subplot(gs[4], sharex=self.ax0) self.ax4 = self.figure.add_subplot(gs[4], sharex=self.ax0)
self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="SpO2", event_code=[5]) self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="SpO2", event_code=[5])
self.ax5 = self.figure.add_subplot(gs[5], sharex=self.ax0) self.ax5 = self.figure.add_subplot(gs[5], sharex=self.ax0)
self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="orgdata", self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="orgdata",
@ -906,9 +823,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
event_show_under=False, event_show_under=False,
title=f"sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)}") title=f"sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)}")
self.label_PSG_event.setText(f"PSG sampNo:{self.sampNo} Index:{ecg_index + 1}/{len(self.ecg_event_label_filtered_df)} " self.label_BCG_event.setText(f"sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)} "
f"Epoch:{one_ecg_data['Epoch']} Duration:{ecg_duration}s")
self.label_BCG_event.setText(f"心晓 sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)} "
f"Epoch:{one_bcg_data['Epoch']} Duration:{bcg_duration}s") f"Epoch:{one_bcg_data['Epoch']} Duration:{bcg_duration}s")
# figManager = plt.get_current_fig_manager() # figManager = plt.get_current_fig_manager()
@ -939,7 +854,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
for j in event_code: for j in event_code:
if channel == "SpO2": if channel == "SpO2":
mask = self.spo2_event_label[SP * self.frequency:EP * self.frequency] == j mask = self.bcg_event_label[SP * self.frequency:EP * self.frequency] == j
elif channel == "orgdata" or channel == "0.7lowpass_resp": elif channel == "orgdata" or channel == "0.7lowpass_resp":
if j <= 5: if j <= 5:
mask = self.bcg_event_label[SP * self.frequency:EP * self.frequency] == j mask = self.bcg_event_label[SP * self.frequency:EP * self.frequency] == j
@ -947,7 +862,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
mask = self.artifact_event_label[SP * self.frequency:EP * self.frequency] == j mask = self.artifact_event_label[SP * self.frequency:EP * self.frequency] == j
linestyle = "-" linestyle = "-"
else: else:
mask = self.ecg_event_label[SP * self.frequency:EP * self.frequency] == j mask = self.bcg_event_label[SP * self.frequency:EP * self.frequency] == j
if event_show_under: if event_show_under:
min_point = self.signal_select[channel][SP * self.frequency:EP * self.frequency].min() min_point = self.signal_select[channel][SP * self.frequency:EP * self.frequency].min()
@ -973,10 +888,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# print(xticks) # print(xticks)
# plt_.xticks(*xticks) # 去掉x轴 # plt_.xticks(*xticks) # 去掉x轴
def show_new_event(self, bcg_index: int, ecg_index: int, front_add_second: int, back_add_second: int, time_move_count: int): def show_new_event(self, bcg_index: int, front_add_second: int, back_add_second: int, time_move_count: int):
""" """
:param bcg_index: 心晓事件在csv中行号 :param bcg_index: 心晓事件在csv中行号
:param ecg_index: PSG事件在csv中序号
:param front_add_second: 向前延伸时间 :param front_add_second: 向前延伸时间
:param back_add_second: 向后延伸时间 :param back_add_second: 向后延伸时间
:param time_move_count: 时间轴移动的时间 :param time_move_count: 时间轴移动的时间
@ -984,34 +898,18 @@ class MainWindow(QMainWindow, Ui_MainWindow):
""" """
# 获取事件实际在csv文件中的序号 # 获取事件实际在csv文件中的序号
bcg_real_index = self.bcg_event_label_filtered_df.index[bcg_index], bcg_real_index = self.bcg_event_label_filtered_df.index[bcg_index],
ecg_real_index = self.ecg_event_label_filtered_df.index[ecg_index],
one_bcg_data = self.bcg_event_label_df.loc[bcg_real_index] one_bcg_data = self.bcg_event_label_df.loc[bcg_real_index]
one_ecg_data = self.ecg_event_label_df.loc[ecg_real_index]
# 获取ECG事件开始与结束时间
event_start_time = datetime.strptime(one_ecg_data["Date"] + " " + one_ecg_data["Time"], '%Y/%m/%d %H:%M:%S')
ecg_SP = (event_start_time - self.ecg_start_time).seconds
ecg_duration = int(float(str(one_ecg_data["Duration"]).split("(")[0]) + 0.5)
ecg_EP = ecg_SP + ecg_duration
# 获取BCG事件开始与结束时间 # 获取BCG事件开始与结束时间
bcg_SP = one_bcg_data["new_start"] bcg_SP = one_bcg_data["Start"]
bcg_EP = one_bcg_data["new_end"] bcg_EP = one_bcg_data["End"]
bcg_duration = bcg_EP - bcg_SP bcg_duration = bcg_EP - bcg_SP
logging.info(f"sampNo:{self.sampNo} " logging.info(f"sampNo:{self.sampNo} "
f"bcg[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}] " f"bcg[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}] "
f"ecg:[index:{ecg_index} epoch:{one_ecg_data['Epoch']} event:{one_ecg_data['Event type']}]") f"ecg:[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}]")
if one_bcg_data['Event type'] != one_ecg_data['Event type']:
logging.error(f"sampNo:{self.sampNo} PSG事件与心晓时间不一致请排查"
f"bcg[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}] "
f"ecg:[index:{ecg_index} epoch:{one_ecg_data['Epoch']} event:{one_ecg_data['Event type']}]")
raise ValueError()
# 进行向两边延展 # 进行向两边延展
ecg_SP = ecg_SP - front_add_second + time_move_count
ecg_EP = ecg_EP + back_add_second + time_move_count
bcg_SP = bcg_SP - front_add_second + time_move_count bcg_SP = bcg_SP - front_add_second + time_move_count
bcg_EP = bcg_EP + back_add_second + time_move_count bcg_EP = bcg_EP + back_add_second + time_move_count
@ -1030,20 +928,20 @@ class MainWindow(QMainWindow, Ui_MainWindow):
# 绘制 Flow1 # 绘制 Flow1
self.ax0 = self.figure.add_subplot(gs[0]) self.ax0 = self.figure.add_subplot(gs[0])
self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Flow T") self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Flow T")
# 绘制 Flow2 # 绘制 Flow2
self.ax1 = self.figure.add_subplot(gs[1], sharex=self.ax0) self.ax1 = self.figure.add_subplot(gs[1], sharex=self.ax0)
self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Flow P") self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Flow P")
self.ax2 = self.figure.add_subplot(gs[2], sharex=self.ax0) self.ax2 = self.figure.add_subplot(gs[2], sharex=self.ax0)
self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Effort Tho") self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Effort Tho")
self.ax3 = self.figure.add_subplot(gs[3], sharex=self.ax0) self.ax3 = self.figure.add_subplot(gs[3], sharex=self.ax0)
self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Effort Abd") self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="Effort Abd")
self.ax4 = self.figure.add_subplot(gs[4], sharex=self.ax0) self.ax4 = self.figure.add_subplot(gs[4], sharex=self.ax0)
self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="SpO2", event_code=[5]) self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="SpO2", event_code=[5])
self.ax5 = self.figure.add_subplot(gs[5], sharex=self.ax0) self.ax5 = self.figure.add_subplot(gs[5], sharex=self.ax0)
self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="orgdata", self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="orgdata",
@ -1056,11 +954,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
event_show_under=False, event_show_under=False,
title=f"sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)}") title=f"sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)}")
self.label_PSG_event.setText(
f"PSG sampNo:{self.sampNo} Index:{ecg_index + 1}/{len(self.ecg_event_label_filtered_df)} "
f"Epoch:{one_ecg_data['Epoch']} Duration:{ecg_duration}s")
self.label_BCG_event.setText( self.label_BCG_event.setText(
f"心晓 sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)} " f"sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)} "
f"Epoch:{one_bcg_data['Epoch']} Duration:{bcg_duration}s") f"Epoch:{one_bcg_data['Epoch']} Duration:{bcg_duration}s")
# figManager = plt.get_current_fig_manager() # figManager = plt.get_current_fig_manager()

48
PSG_label_2_BCG_label.py Normal file
View File

@ -0,0 +1,48 @@
import os
import pandas as pd
import pyedflib
from pathlib import Path
def get_time_to_seconds(time_str):
h, m, s = map(int, time_str.split(":"))
return h * 3600 + m * 60 + s
base_event = ["Hypopnea", "Central apnea", "Obstructive apnea", "Mixed apnea"]
# 输入设置
sampID = 888
dir_path = r"E:\data_annotation\6SleepApnea_annotation_GUI_demo\data"
# 数据路径设置
PSG_Data_Path = Path(os.path.join(dir_path, "PSG"))
PSG_Label_Path = Path(os.path.join(dir_path, "PSG_label"))
BCG_Data_Path = Path(os.path.join(dir_path, "BCG"))
BCG_Label_Path = Path(os.path.join(dir_path, "BCG_label"))
# Artifact_Label_Path = Path(os.path.join(dir_path, "Artifact_label"))
# Artifact_Offset_Path = Path(os.path.join(dir_path, "Artifact_label", "20220421Artifact_offset_value.xlsx"))
# 读取PSG标签
df_PSG_label = pd.read_csv(PSG_Label_Path / (f"export" + str(sampID) + ".csv"), encoding="gbk")
df_PSG_label = df_PSG_label.loc[:, ~df_PSG_label.columns.str.contains('^Unnamed')]
df_PSG_label = df_PSG_label[df_PSG_label["Event type"].isin(base_event)]
df_PSG_label['Duration'] = df_PSG_label['Duration'].str.replace(r' \(.*?\)', '', regex=True)
# 读取EDF文件
edf_File = pyedflib.EdfReader(str(PSG_Data_Path / f"A{str(sampID).rjust(7, '0')}.edf"))
# 获取PSG记录开始时间
start_time = str(edf_File.getStartdatetime()).split(" ")[1]
start_time_abs = get_time_to_seconds(start_time)
# 计算起始时间秒数和终止时间秒数
df_PSG_label['Start'] = (df_PSG_label['Time'].apply(get_time_to_seconds) - start_time_abs).apply(lambda x: x + 24 * 3600 if x < 0 else x).astype(int)
df_PSG_label['End'] = df_PSG_label['Start'] + df_PSG_label['Duration'].astype(float).round(0).astype(int)
# 打印结果
print(df_PSG_label)
# 写入csv文件
df_PSG_label.to_csv(r"E:\data_annotation\6SleepApnea_annotation_GUI_demo\data\BCG_label\export" + str(sampID) + "_all.csv", index=False, encoding="gbk")
# 打印结果
print("sampID_" + str(sampID) + "写入csv成功")