def wheelEvent(self, a0: QtGui.QWheelEvent) -> None: if len(self.tdrWindow.td) == 0: a0.ignore() return chart_height = self.chartHeight chart_width = self.chartWidth do_zoom_x = do_zoom_y = True if a0.modifiers() == QtCore.Qt.ShiftModifier: do_zoom_x = False if a0.modifiers() == QtCore.Qt.ControlModifier: do_zoom_y = False if a0.angleDelta().y() > 0: # Zoom in a0.accept() # Center of zoom = a0.x(), a0.y() # We zoom in by 1/10 of the width/height. rate = a0.angleDelta().y() / 120 if do_zoom_x: zoomx = rate * chart_width / 10 else: zoomx = 0 if do_zoom_y: zoomy = rate * chart_height / 10 else: zoomy = 0 absx = max(0, a0.x() - self.leftMargin) absy = max(0, a0.y() - self.topMargin) ratiox = absx / chart_width ratioy = absy / chart_height # TODO: Change zoom to center on the mouse if possible, or extend box to the side that has room if not. p1x = int(self.leftMargin + ratiox * zoomx) p1y = int(self.topMargin + ratioy * zoomy) p2x = int(self.leftMargin + chart_width - (1 - ratiox) * zoomx) p2y = int(self.topMargin + chart_height - (1 - ratioy) * zoomy) self.zoomTo(p1x, p1y, p2x, p2y) elif a0.angleDelta().y() < 0: # Zoom out a0.accept() # Center of zoom = a0.x(), a0.y() # We zoom out by 1/9 of the width/height, to match zoom in. rate = -a0.angleDelta().y() / 120 if do_zoom_x: zoomx = rate * chart_width / 9 else: zoomx = 0 if do_zoom_y: zoomy = rate * chart_height / 9 else: zoomy = 0 absx = max(0, a0.x() - self.leftMargin) absy = max(0, a0.y() - self.topMargin) ratiox = absx / chart_width ratioy = absy / chart_height p1x = int(self.leftMargin - ratiox * zoomx) p1y = int(self.topMargin - ratioy * zoomy) p2x = int(self.leftMargin + chart_width + (1 - ratiox) * zoomx) p2y = int(self.topMargin + chart_height + (1 - ratioy) * zoomy) self.zoomTo(p1x, p1y, p2x, p2y) else: a0.ignore()
def wheelEvent(self, a0: QtGui.QWheelEvent) -> None: if len(self.data) == 0 and len(self.reference) == 0: a0.ignore() return do_zoom_x = do_zoom_y = True if a0.modifiers() == QtCore.Qt.ShiftModifier: do_zoom_x = False if a0.modifiers() == QtCore.Qt.ControlModifier: do_zoom_y = False if a0.angleDelta().y() > 0: # Zoom in a0.accept() # Center of zoom = a0.x(), a0.y() # We zoom in by 1/10 of the width/height. rate = a0.angleDelta().y() / 120 if do_zoom_x: zoomx = rate * self.chartWidth / 10 else: zoomx = 0 if do_zoom_y: zoomy = rate * self.chartHeight / 10 else: zoomy = 0 absx = max(0, a0.x() - self.leftMargin) absy = max(0, a0.y() - self.topMargin) ratiox = absx / self.chartWidth ratioy = absy / self.chartHeight p1x = int(self.leftMargin + ratiox * zoomx) p1y = int(self.topMargin + ratioy * zoomy) p2x = int(self.leftMargin + self.chartWidth - (1 - ratiox) * zoomx) p2y = int(self.topMargin + self.chartHeight - (1 - ratioy) * zoomy) self.zoomTo(p1x, p1y, p2x, p2y) elif a0.angleDelta().y() < 0: # Zoom out a0.accept() # Center of zoom = a0.x(), a0.y() # We zoom out by 1/9 of the width/height, to match zoom in. rate = -a0.angleDelta().y() / 120 if do_zoom_x: zoomx = rate * self.chartWidth / 9 else: zoomx = 0 if do_zoom_y: zoomy = rate * self.chartHeight / 9 else: zoomy = 0 absx = max(0, a0.x() - self.leftMargin) absy = max(0, a0.y() - self.topMargin) ratiox = absx / self.chartWidth ratioy = absy / self.chartHeight p1x = int(self.leftMargin - ratiox * zoomx) p1y = int(self.topMargin - ratioy * zoomy) p2x = int(self.leftMargin + self.chartWidth + (1 - ratiox) * zoomx) p2y = int(self.topMargin + self.chartHeight + (1 - ratioy) * zoomy) self.zoomTo(p1x, p1y, p2x, p2y) else: a0.ignore()
def wheelEvent(self, event: QWheelEvent): """ WheelEvent is the callback for wheel events of the operating system. Dependent on the OS, this can be a trackpad or a mouse wheel """ if not (self.imageOpened): return # Disable wheel if x position is leaving image compartment if (event.x() > self.ui.verticalScrollBar.pos().x()): return if (event.source() == Qt.MouseEventSynthesizedBySystem): # touch pad geasture - use direct scrolling, not zooming # this is usually indicative for Mac OS subs = np.asarray( [float(event.pixelDelta().x()), float(event.pixelDelta().y())]) / 32000.0 * self.getZoomValue() self.relativeCoords -= subs if (self.relativeCoords[0] < -0.5): self.relativeCoords[0] = -0.5 if (self.relativeCoords[1] < -0.5): self.relativeCoords[1] = -0.5 else: # mouse wheel - use scrolling inc = 1 if (event.angleDelta().y() > 0): inc = -1 self.setZoomValue(self.getZoomValue() * np.power(1.25, -inc)) self.showImage() self.updateScrollbars()
def wheelEvent(self, event: QtGui.QWheelEvent): imgrect = self.imglabel.geometry() delta = event.angleDelta().y() # x,y 为映射不变点坐标 if imgrect.x() < event.x() < (imgrect.x() + imgrect.width()) and \ imgrect.y() < event.y() < (imgrect.y() + imgrect.height()): x = int(event.x() - imgrect.x()) y = int(event.y() - imgrect.y()) else: x = imgrect.width() // 2 y = imgrect.height() // 2 # 根据 delta 来判断滚轮方向 if delta > 0: self.imglabel.resizeImg(x, y, 1, x, y) if delta < 0: self.imglabel.resizeImg(x, y, -1, x, y)
def wheelEvent(self, event: QWheelEvent): if self.zoom_enabled: delta = event.angleDelta().y() curscale = self.scale() mx_before = (event.x() - self.x_offset) / curscale my_before = (event.y() - self.y_offset) / curscale self.zoom += delta / 240 scale = self.scale() mx_after = (event.x() - self.x_offset) / scale my_after = (event.y() - self.y_offset) / scale self.x_offset -= (mx_before - mx_after) * scale self.y_offset -= (my_before - my_after) * scale self.every = max( 1, int(0.25*self.gridsize * self.gridsize/scale)) self.onGridSizeChange.emit(self.every) self.repaint()
def wheelEvent(self, event: QWheelEvent): (x, y) = self.transform_mouse_coordinates(event.x(), event.y()) delta_scale = 0.1 if event.angleDelta().y() > 0: self.scale += delta_scale elif self.scale <= delta_scale * 2: return else: self.scale -= delta_scale delta_x = x * delta_scale delta_y = y * delta_scale if event.angleDelta().y() > 0: self.offset -= QPoint(delta_x, delta_y) else: self.offset += QPoint(delta_x, delta_y) self.repaint()
def wheelEvent(self, event: QWheelEvent): """Process mouse wheel events. The mouse wheel can be used for zooming. Parameters ---------- event: QWheelEvent The event providing the angle delta. """ delta = event.angleDelta().y() / 120 # will be +/- 1 center = (self._view[0] + (event.x() / self.width() * (self._view[1] - self._view[0]))) end = center - (center - self._view[1]) / (1 + delta * 0.01) start = center - (center - self._view[0]) / (1 + delta * 0.01) self.setView(start, end) # We will accept the event, to prevent interference # with the QScrollArea. event.accept()