[detectionview] support single item selection, hightlight selected items
This commit is contained in:
parent
4f18387c2f
commit
ae0df7b4c3
@ -15,9 +15,15 @@ class Detection(QGraphicsEllipseItem):
|
|||||||
super().__init__(x, y, width, height)
|
super().__init__(x, y, width, height)
|
||||||
self.setBrush(brush)
|
self.setBrush(brush)
|
||||||
self.setAcceptHoverEvents(True) # Enable hover events if needed
|
self.setAcceptHoverEvents(True) # Enable hover events if needed
|
||||||
|
self.setFlags(QGraphicsRectItem.ItemIsSelectable)
|
||||||
|
|
||||||
def mousePressEvent(self, event):
|
def mousePressEvent(self, event):
|
||||||
self.signals.clicked.emit(self.data(0), QPointF(event.scenePos().x(), event.scenePos().y()))
|
self.signals.clicked.emit(self.data(0), QPointF(event.scenePos().x(), event.scenePos().y()))
|
||||||
|
# item = self.scene().itemAt(event.scenePos(), self.views()[0].transform())
|
||||||
|
|
||||||
|
# if item:
|
||||||
|
# item.setSelected(True)
|
||||||
|
|
||||||
# print(f"Rectangle clicked at: {event.scenePos().x()}, {event.scenePos().y()}")
|
# print(f"Rectangle clicked at: {event.scenePos().x()}, {event.scenePos().y()}")
|
||||||
|
|
||||||
def hoverEnterEvent(self, event):
|
def hoverEnterEvent(self, event):
|
||||||
@ -54,20 +60,22 @@ class DetectionScene(QGraphicsScene):
|
|||||||
|
|
||||||
def mouseReleaseEvent(self, event):
|
def mouseReleaseEvent(self, event):
|
||||||
if event.button() == Qt.LeftButton and self.selection_rect is not None:
|
if event.button() == Qt.LeftButton and self.selection_rect is not None:
|
||||||
# Perform selection of items within the selection rectangle
|
|
||||||
rect = self.selection_rect.rect()
|
rect = self.selection_rect.rect()
|
||||||
|
|
||||||
# Remove the temporary selection rectangle
|
|
||||||
self.removeItem(self.selection_rect)
|
self.removeItem(self.selection_rect)
|
||||||
self.selection_rect = None
|
self.selection_rect = None
|
||||||
|
if rect.width() > 0.0:
|
||||||
# Find all items that intersect with the selection rectangle
|
# Find all items that intersect with the selection rectangle
|
||||||
selected_items = self.items(rect, Qt.IntersectsItemShape)
|
selected_items = self.items(rect, Qt.IntersectsItemShape)
|
||||||
for item in selected_items:
|
for item in selected_items:
|
||||||
if not isinstance(item, Detection):
|
if not isinstance(item, Detection):
|
||||||
selected_items.remove(item)
|
selected_items.remove(item)
|
||||||
item.setSelected(True) # Mark the item as selected
|
item.setSelected(True) # Mark the item as selected
|
||||||
self.signals.itemsSelected.emit(selected_items)
|
self.signals.itemsSelected.emit(selected_items)
|
||||||
|
else:
|
||||||
|
item = self.itemAt(event.scenePos(), self.views()[0].transform())
|
||||||
|
if item:
|
||||||
|
item.setSelected(True)
|
||||||
|
self.signals.itemsSelected.emit(self.selectedItems())
|
||||||
super().mouseReleaseEvent(event)
|
super().mouseReleaseEvent(event)
|
||||||
|
|
||||||
|
|
||||||
@ -133,7 +141,7 @@ class DetectionView(QWidget):
|
|||||||
|
|
||||||
def main():
|
def main():
|
||||||
def items_selected(items):
|
def items_selected(items):
|
||||||
print(items)
|
print("items selected", items)
|
||||||
|
|
||||||
import pickle
|
import pickle
|
||||||
import numpy as np
|
import numpy as np
|
||||||
@ -141,7 +149,7 @@ def main():
|
|||||||
from PySide6.QtWidgets import QApplication
|
from PySide6.QtWidgets import QApplication
|
||||||
|
|
||||||
datafile = PACKAGE_ROOT / "data/merged_small.pkl"
|
datafile = PACKAGE_ROOT / "data/merged_small.pkl"
|
||||||
imgfile = PACKAGE_ROOT / "data/merged.png"
|
imgfile = PACKAGE_ROOT / "data/merged2.png"
|
||||||
print(datafile)
|
print(datafile)
|
||||||
with open(datafile, "rb") as f:
|
with open(datafile, "rb") as f:
|
||||||
df = pickle.load(f)
|
df = pickle.load(f)
|
||||||
|
Loading…
Reference in New Issue
Block a user