def qgraphicsview_map_rect_from_scene(view: QGraphicsView, rect: QRectF) -> QPolygonF: """Like QGraphicsView.mapFromScene(QRectF) but returning a QPolygonF (without rounding). """ tr = view.viewportTransform() p1 = tr.map(rect.topLeft()) p2 = tr.map(rect.topRight()) p3 = tr.map(rect.bottomRight()) p4 = tr.map(rect.bottomLeft()) return QPolygonF([p1, p2, p3, p4])
def select_by_rectangle(self, rect: QRectF): if self.bar_item is None: return x0, x1 = sorted((rect.topLeft().x(), rect.bottomRight().x())) y0, y1 = sorted((rect.topLeft().y(), rect.bottomRight().y())) x = self.bar_item.opts["x"] height = self.bar_item.opts["height"] d = self.bar_width / 2 # positive bars mask = (x0 <= x + d) & (x1 >= x - d) & (y0 <= height) & (y1 > 0) # negative bars mask |= (x0 <= x + d) & (x1 >= x - d) & (y0 <= 0) & (y1 > height) self.select_by_indices(list(np.flatnonzero(mask)))