体动选取区域的判别尚未做的很完整,选中多个已有的体动的区域时可能会出现问题

This commit is contained in:
Yorusora
2025-05-21 13:09:16 +08:00
parent 74d9642be9
commit 4ec1a69093
3 changed files with 43 additions and 5 deletions

View File

@ -9,6 +9,7 @@ from PySide6.QtWidgets import QMessageBox, QMainWindow, QApplication, QTableWidg
from matplotlib import gridspec, patches
from matplotlib.backends.backend_qt import NavigationToolbar2QT
from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg
from numpy import array, append
from numpy.fft import fft, fftfreq
from overrides import overrides
from pandas import read_csv, DataFrame, concat
@ -661,6 +662,8 @@ class MainWindow_artifact_label(QMainWindow):
def __slot_btn_label__(self):
sender = self.sender()
flag = False
select_row = array([]).astype(dict)
if sender == self.ui.pushButton_type_1:
type = 1
@ -683,15 +686,46 @@ class MainWindow_artifact_label(QMainWindow):
for index, row in self.data.df_Artifact_a.iterrows():
value_startTime = row['startTime']
value_endTime = row['endTime']
# if ((value_endTime >= int(self.ui.lineEdit_start_time.text()) and value_startTime <= int(self.ui.lineEdit_start_time.text())) or
# (value_endTime >= int(self.ui.lineEdit_end_time.text()) and value_startTime <= int(self.ui.lineEdit_end_time.text())) or
# (value_startTime >= int(self.ui.lineEdit_start_time.text()) and value_endTime <= int(self.ui.lineEdit_end_time.text())) or
# (value_startTime <= int(self.ui.lineEdit_start_time.text()) and value_endTime >= int(self.ui.lineEdit_end_time.text()))):
# select_row = append(select_row, row)
# TODO体动选取区域的判别尚未做的很完整选中多个已有的体动的区域时可能会出现问题
if (type == 1 and row['type'] == 1) or (type == 2 and row['type'] == 2) or (type == 3 and row['type'] == 3):
if ((value_startTime > int(self.ui.lineEdit_start_time.text()) and (value_startTime - int(self.ui.lineEdit_end_time.text()) <= 2 * Config["InputConfig"]["UseFreq"])) or
(value_endTime < int(self.ui.lineEdit_end_time.text()) and (int(self.ui.lineEdit_end_time.text()) - value_endTime <= 2 * Config["InputConfig"]["UseFreq"]))):
reply = QMessageBox.question(self, '确认', '{}{},是否确认合并?'.format(Constants.ARTIFACT_LABEL_MERGE, row['number']), QMessageBox.Yes | QMessageBox.No,
QMessageBox.No)
if reply == QMessageBox.Yes:
self.data.df_Artifact_a.loc[self.data.df_Artifact_a['number'] == row['number'],
['number', 'type', 'startTime', 'endTime']] = [
int(row['number']),
int(type),
int(self.ui.lineEdit_start_time.text()) if int(self.ui.lineEdit_start_time.text()) < int(row['startTime']) else int(row['startTime']),
int(self.ui.lineEdit_end_time.text()) if int(self.ui.lineEdit_end_time.text()) > int(row['endTime']) else int(row['endTime'])
]
new_row = {'number': int(row['number']),
'type': int(type),
'startTime': int(self.ui.lineEdit_start_time.text()),
'endTime': int(self.ui.lineEdit_end_time.text())}
flag = True
break
else:
return
if value_startTime <= int(self.ui.lineEdit_end_time.text()) and int(
self.ui.lineEdit_start_time.text()) <= value_endTime:
PublicFunc.msgbox_output(self, f"{Constants.ARTIFACT_LABEL_OVERLAPPING}{row['number']}", Constants.MSGBOX_TYPE_ERROR)
return
new_row = {'number': int(len(self.data.df_Artifact_a) + 1),
'type': int(type),
'startTime': int(self.ui.lineEdit_start_time.text()),
'endTime': int(self.ui.lineEdit_end_time.text())}
self.data.df_Artifact_a = concat([self.data.df_Artifact_a, DataFrame([new_row])], ignore_index=True)
if not flag:
new_row = {'number': int(len(self.data.df_Artifact_a) + 1),
'type': int(type),
'startTime': int(self.ui.lineEdit_start_time.text()),
'endTime': int(self.ui.lineEdit_end_time.text())}
self.data.df_Artifact_a = concat([self.data.df_Artifact_a, DataFrame([new_row])], ignore_index=True)
sorted_part = self.data.df_Artifact_a[['type', 'startTime', 'endTime']].sort_values(by='startTime').reset_index(
drop=True)
self.data.df_Artifact_a[['type', 'startTime', 'endTime']] = sorted_part