def updateScaleBox(self, p1, p2): """ Overload to use ViewBox.mapToView instead of mapRectFromParent mapRectFromParent (from Qt) uses QTransform.invert() which has floating-point issues and can't invert the matrix with large coefficients. ViewBox.mapToView uses invertQTransform from pyqtgraph. This code, except for first three lines, are copied from the overloaded method. """ p1 = self.mapToView(p1) p2 = self.mapToView(p2) r = QRectF(p1, p2) self.rbScaleBox.setPos(r.topLeft()) tr = QTransform.fromScale(r.width(), r.height()) self.rbScaleBox.setTransform(tr) self.rbScaleBox.show()
def rescale(self): if self.legend: leg_height = self.legend.boundingRect().height() leg_extra = 1.5 else: leg_height = 0 leg_extra = 1 vw, vh = self.view.width(), self.view.height() - leg_height scale = min(vw / (self.size_x + 1), vh / ((self.size_y + leg_extra) * self._grid_factors[1])) self.view.setTransform(QTransform.fromScale(scale, scale)) if self.hexagonal: self.view.setSceneRect(0, -1, self.size_x - 1, (self.size_y + leg_extra) * sqrt3_2 + leg_height / scale) else: self.view.setSceneRect(-0.25, -0.25, self.size_x - 0.5, self.size_y - 0.5 + leg_height / scale)
def setZoomFactor(self, factor: float) -> None: """ Set the zoom level `factor` Parameters ---------- factor: Zoom level where 100 is default 50 is half the size and 200 is twice the size """ if self.__zoomFactor != factor or self.__fitInView: self.__fitInView = False self._actions.fit.setChecked(False) self.__zoomFactor = factor self.setTransform( QTransform.fromScale(*(self.__zoomFactor / 100, ) * 2)) self._actions.zoomout.setEnabled(factor >= 20) self._actions.zoomin.setEnabled(factor <= 300) self.zoomFactorChanged.emit(factor) if self.__widgetResizable: self._resizeToFit()
def _setup_scene(self): self._clear_plot() self.matrix_item = DistanceMapItem(self._sorted_matrix) # Scale the y axis to compensate for pg.ViewBox's y axis invert self.matrix_item.setTransform(QTransform.fromScale(1, -1), ) self.viewbox.addItem(self.matrix_item) # Set fixed view box range. h, w = self._sorted_matrix.shape self.viewbox.setRange(QRectF(0, -h, w, h), padding=0) self.matrix_item.selectionChanged.connect(self._invalidate_selection) if self.sorting == OWDistanceMap.NoOrdering: tree = None elif self.sorting == OWDistanceMap.Clustering: tree = self._cluster_tree() elif self.sorting == OWDistanceMap.OrderedClustering: tree = self._ordered_cluster_tree() self._set_displayed_dendrogram(tree) self._update_color()
def set_zoom(zoom): if view._zoom != zoom: view._zoom = zoom view.setTransform(QTransform.fromScale(*(view._zoom / 100, ) * 2)) zoomout.setEnabled(zoom >= 20) zoomin.setEnabled(zoom <= 300)
def update_rect(self, p1: QPointF, p2: QPointF): rect = QRectF(p1, p2) self.setPos(rect.topLeft()) trans = QTransform.fromScale(rect.width(), rect.height()) self.setTransform(trans)