优化事件矩形处理逻辑,添加获取矩形宽度的辅助函数,确保支持不同类型的矩形对象
This commit is contained in:
@ -11,6 +11,8 @@ from PySide6.QtWidgets import QMessageBox, QMainWindow, QApplication, QButtonGro
|
||||
from matplotlib import gridspec
|
||||
from matplotlib.backends.backend_qt import NavigationToolbar2QT
|
||||
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 overrides import overrides
|
||||
@ -280,7 +282,7 @@ class Data:
|
||||
for file_key in check_file_list:
|
||||
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" +
|
||||
self.config["Path"][file_key] +
|
||||
str(self.config["Path"][file_key]) +
|
||||
Constants.FAILURE_REASON["Path_Not_Exist"])
|
||||
|
||||
try:
|
||||
@ -342,6 +344,11 @@ class Data:
|
||||
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["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 = self.df_origin.sort_values(by="Start", ascending=True)
|
||||
@ -995,8 +1002,7 @@ class MainWindow_SA_label(QMainWindow):
|
||||
else:
|
||||
# 已经选中事件的情况下
|
||||
if self.selected_event_rect is not None:
|
||||
x_rect = self.selected_event_rect.get_x()
|
||||
width = self.selected_event_rect.get_width()
|
||||
x_rect, width = self.__get_x_and_width__(self.selected_event_rect)
|
||||
event_left = x_rect
|
||||
event_right = x_rect + width
|
||||
|
||||
@ -1065,7 +1071,7 @@ class MainWindow_SA_label(QMainWindow):
|
||||
color="orange",
|
||||
alpha=0.4)
|
||||
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_width = new_right - x_rect
|
||||
self.selected_event_rect.set_width(new_width)
|
||||
@ -1083,8 +1089,7 @@ class MainWindow_SA_label(QMainWindow):
|
||||
elif event.button is 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()
|
||||
width = self.selected_event_rect.get_width()
|
||||
x_rect, width = self.__get_x_and_width__(self.selected_event_rect)
|
||||
event_left = x_rect
|
||||
event_right = x_rect + width
|
||||
|
||||
@ -1121,9 +1126,9 @@ class MainWindow_SA_label(QMainWindow):
|
||||
self.show_selected_event(int(event_row["Index"]))
|
||||
# 高亮 透明度设置为0.4
|
||||
self.selected_event_rect.set_alpha(0.4)
|
||||
self.ui.spinBox_correctStart.setValue(self.selected_event_rect.get_x())
|
||||
self.ui.spinBox_correctEnd.setValue(
|
||||
self.selected_event_rect.get_x() + self.selected_event_rect.get_width())
|
||||
x_rect, width = self.__get_x_and_width__(self.selected_event_rect)
|
||||
self.ui.spinBox_correctStart.setValue(x_rect)
|
||||
self.ui.spinBox_correctEnd.setValue(x_rect + width)
|
||||
|
||||
elif self.press is None and event_row is None:
|
||||
pass
|
||||
@ -1173,8 +1178,7 @@ class MainWindow_SA_label(QMainWindow):
|
||||
if self.press is None:
|
||||
# 点击了新建SA事件区域
|
||||
if event_row is None and self.selected_event_info["Index"] == -1:
|
||||
x_rect = self.selected_event_rect.get_x()
|
||||
width = self.selected_event_rect.get_width()
|
||||
x_rect, width = self.__get_x_and_width__(self.selected_event_rect)
|
||||
event_left = x_rect
|
||||
event_right = x_rect + width
|
||||
|
||||
@ -1244,8 +1248,7 @@ class MainWindow_SA_label(QMainWindow):
|
||||
def __reset_rect__(self):
|
||||
if self.selected_event_info is not None and self.selected_event_rect is not None:
|
||||
self.selected_event_rect.set_alpha(0.2)
|
||||
x_rect = self.selected_event_rect.get_x()
|
||||
width = self.selected_event_rect.get_width()
|
||||
x_rect, width = self.__get_x_and_width__(self.selected_event_rect)
|
||||
|
||||
event_left = self.selected_event_info["correct_Start"] if self.selected_event_info["isLabeled"] != -1 else \
|
||||
self.selected_event_info["Start"]
|
||||
@ -1999,7 +2002,20 @@ class MainWindow_SA_label(QMainWindow):
|
||||
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):
|
||||
def __init__(self, canvas, parent):
|
||||
super().__init__(canvas, parent)
|
||||
|
||||
Reference in New Issue
Block a user