使用PyQt基于QGraphicsView
实现可用滚轮缩放、鼠标按住拖动的图片查看器,同时隐藏滚动条。网上找到的都是C++的代码,故翻译成Python代码,已经测试,记录备查。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| class ImageView(QGraphicsView): def __init__(self): super(ImageView, self).__init__() self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setDragMode(QGraphicsView.ScrollHandDrag)
def wheelEvent(self, event: QWheelEvent) -> None: if len(self.scene().items()) == 0: return
curPoint = event.position() scenePos = self.mapToScene(QPoint(curPoint.x(), curPoint.y())) viewWidth = self.viewport().width() viewHeight = self.viewport().height() hScale = curPoint.x() / viewWidth vScale = curPoint.y() / viewHeight wheelDeltaValue = event.angleDelta().y() scaleFactor = self.transform().m11() if (scaleFactor < 0.05 and wheelDeltaValue<0) or (scaleFactor>50 and wheelDeltaValue>0): return
if wheelDeltaValue > 0: self.scale(1.2, 1.2) else: self.scale(1.0/1.2, 1.0/1.2) viewPoint = self.transform().map(scenePos) self.horizontalScrollBar().setValue(int(viewPoint.x() - viewWidth * hScale )) self.verticalScrollBar().setValue(int(viewPoint.y() - viewHeight * vScale )) self.update()
|