优化事件矩形处理逻辑,添加获取矩形宽度的辅助函数,确保支持不同类型的矩形对象
This commit is contained in:
@ -11,6 +11,8 @@ from PySide6.QtWidgets import QMessageBox, QMainWindow, QApplication, QButtonGro
|
|||||||
from matplotlib import gridspec
|
from matplotlib import gridspec
|
||||||
from matplotlib.backends.backend_qt import NavigationToolbar2QT
|
from matplotlib.backends.backend_qt import NavigationToolbar2QT
|
||||||
from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg
|
from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg
|
||||||
|
from matplotlib.collections import PolyCollection
|
||||||
|
from matplotlib.patches import Rectangle
|
||||||
|
|
||||||
from numpy import array, zeros, append, linspace, place, nan
|
from numpy import array, zeros, append, linspace, place, nan
|
||||||
from overrides import overrides
|
from overrides import overrides
|
||||||
@ -280,7 +282,7 @@ class Data:
|
|||||||
for file_key in check_file_list:
|
for file_key in check_file_list:
|
||||||
if (not self.config["Path"][file_key].is_file()) or (not self.config["Path"][file_key].exists()):
|
if (not self.config["Path"][file_key].is_file()) or (not self.config["Path"][file_key].exists()):
|
||||||
return Result().failure(info=Constants.INPUT_FAILURE + "\n" +
|
return Result().failure(info=Constants.INPUT_FAILURE + "\n" +
|
||||||
self.config["Path"][file_key] +
|
str(self.config["Path"][file_key]) +
|
||||||
Constants.FAILURE_REASON["Path_Not_Exist"])
|
Constants.FAILURE_REASON["Path_Not_Exist"])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -342,6 +344,11 @@ class Data:
|
|||||||
self.df_origin = read_csv(self.config["Path"]["Input_SA_Label"], encoding="gbk")
|
self.df_origin = read_csv(self.config["Path"]["Input_SA_Label"], encoding="gbk")
|
||||||
self.df_origin["Start"] = self.df_origin["Start"].astype(int)
|
self.df_origin["Start"] = self.df_origin["Start"].astype(int)
|
||||||
self.df_origin["End"] = self.df_origin["End"].astype(int)
|
self.df_origin["End"] = self.df_origin["End"].astype(int)
|
||||||
|
# 查看index是否存在
|
||||||
|
if "Index" not in self.df_origin.columns:
|
||||||
|
# 添加Index列
|
||||||
|
self.df_origin.insert(0, "Index", range(1, len(self.df_origin) + 1))
|
||||||
|
|
||||||
self.df_origin["Index"] = self.df_origin["Index"].astype(int)
|
self.df_origin["Index"] = self.df_origin["Index"].astype(int)
|
||||||
|
|
||||||
self.df_origin = self.df_origin.sort_values(by="Start", ascending=True)
|
self.df_origin = self.df_origin.sort_values(by="Start", ascending=True)
|
||||||
@ -995,8 +1002,7 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
else:
|
else:
|
||||||
# 已经选中事件的情况下
|
# 已经选中事件的情况下
|
||||||
if self.selected_event_rect is not None:
|
if self.selected_event_rect is not None:
|
||||||
x_rect = self.selected_event_rect.get_x()
|
x_rect, width = self.__get_x_and_width__(self.selected_event_rect)
|
||||||
width = self.selected_event_rect.get_width()
|
|
||||||
event_left = x_rect
|
event_left = x_rect
|
||||||
event_right = x_rect + width
|
event_right = x_rect + width
|
||||||
|
|
||||||
@ -1065,7 +1071,7 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
color="orange",
|
color="orange",
|
||||||
alpha=0.4)
|
alpha=0.4)
|
||||||
else:
|
else:
|
||||||
x_rect = self.selected_event_rect.get_x()
|
x_rect, width = self.__get_x_and_width__(self.selected_event_rect)
|
||||||
new_right = round(int(x_press) + dx)
|
new_right = round(int(x_press) + dx)
|
||||||
new_width = new_right - x_rect
|
new_width = new_right - x_rect
|
||||||
self.selected_event_rect.set_width(new_width)
|
self.selected_event_rect.set_width(new_width)
|
||||||
@ -1083,8 +1089,7 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
elif event.button is None:
|
elif event.button is None:
|
||||||
if self.selected_event_info is not None and self.selected_event_rect is not None:
|
if self.selected_event_info is not None and self.selected_event_rect is not None:
|
||||||
# 非按下时,靠近边界时,修改光标样式
|
# 非按下时,靠近边界时,修改光标样式
|
||||||
x_rect = self.selected_event_rect.get_x()
|
x_rect, width = self.__get_x_and_width__(self.selected_event_rect)
|
||||||
width = self.selected_event_rect.get_width()
|
|
||||||
event_left = x_rect
|
event_left = x_rect
|
||||||
event_right = x_rect + width
|
event_right = x_rect + width
|
||||||
|
|
||||||
@ -1121,9 +1126,9 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
self.show_selected_event(int(event_row["Index"]))
|
self.show_selected_event(int(event_row["Index"]))
|
||||||
# 高亮 透明度设置为0.4
|
# 高亮 透明度设置为0.4
|
||||||
self.selected_event_rect.set_alpha(0.4)
|
self.selected_event_rect.set_alpha(0.4)
|
||||||
self.ui.spinBox_correctStart.setValue(self.selected_event_rect.get_x())
|
x_rect, width = self.__get_x_and_width__(self.selected_event_rect)
|
||||||
self.ui.spinBox_correctEnd.setValue(
|
self.ui.spinBox_correctStart.setValue(x_rect)
|
||||||
self.selected_event_rect.get_x() + self.selected_event_rect.get_width())
|
self.ui.spinBox_correctEnd.setValue(x_rect + width)
|
||||||
|
|
||||||
elif self.press is None and event_row is None:
|
elif self.press is None and event_row is None:
|
||||||
pass
|
pass
|
||||||
@ -1173,8 +1178,7 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
if self.press is None:
|
if self.press is None:
|
||||||
# 点击了新建SA事件区域
|
# 点击了新建SA事件区域
|
||||||
if event_row is None and self.selected_event_info["Index"] == -1:
|
if event_row is None and self.selected_event_info["Index"] == -1:
|
||||||
x_rect = self.selected_event_rect.get_x()
|
x_rect, width = self.__get_x_and_width__(self.selected_event_rect)
|
||||||
width = self.selected_event_rect.get_width()
|
|
||||||
event_left = x_rect
|
event_left = x_rect
|
||||||
event_right = x_rect + width
|
event_right = x_rect + width
|
||||||
|
|
||||||
@ -1244,8 +1248,7 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
def __reset_rect__(self):
|
def __reset_rect__(self):
|
||||||
if self.selected_event_info is not None and self.selected_event_rect is not None:
|
if self.selected_event_info is not None and self.selected_event_rect is not None:
|
||||||
self.selected_event_rect.set_alpha(0.2)
|
self.selected_event_rect.set_alpha(0.2)
|
||||||
x_rect = self.selected_event_rect.get_x()
|
x_rect, width = self.__get_x_and_width__(self.selected_event_rect)
|
||||||
width = self.selected_event_rect.get_width()
|
|
||||||
|
|
||||||
event_left = self.selected_event_info["correct_Start"] if self.selected_event_info["isLabeled"] != -1 else \
|
event_left = self.selected_event_info["correct_Start"] if self.selected_event_info["isLabeled"] != -1 else \
|
||||||
self.selected_event_info["Start"]
|
self.selected_event_info["Start"]
|
||||||
@ -1999,7 +2002,20 @@ class MainWindow_SA_label(QMainWindow):
|
|||||||
row["Index"]: span
|
row["Index"]: span
|
||||||
})
|
})
|
||||||
|
|
||||||
|
def __get_x_and_width__(self, event_rect):
|
||||||
|
"""Get the width of a rectangle in data coordinates."""
|
||||||
|
# pyside6.9.0 axvspan 返回的是一个Rectangle对象
|
||||||
|
# pyside6.9.1 axvspan 返回的是一个PolyCollection对象
|
||||||
|
if isinstance(event_rect, Rectangle):
|
||||||
|
x = event_rect.get_x()
|
||||||
|
width = event_rect.get_width()
|
||||||
|
elif isinstance(event_rect, PolyCollection):
|
||||||
|
verts = event_rect.get_paths()[0].vertices
|
||||||
|
x = verts[0, 0]
|
||||||
|
width = verts[2, 0] - verts[0, 0]
|
||||||
|
else:
|
||||||
|
raise TypeError("Unsupported event_rect type")
|
||||||
|
return x, width
|
||||||
class CustomNavigationToolbar(NavigationToolbar2QT):
|
class CustomNavigationToolbar(NavigationToolbar2QT):
|
||||||
def __init__(self, canvas, parent):
|
def __init__(self, canvas, parent):
|
||||||
super().__init__(canvas, parent)
|
super().__init__(canvas, parent)
|
||||||
|
|||||||
Reference in New Issue
Block a user