通过PYQT5写一个窗口显示图像,且保留图像原尺寸,且通过滚轮可以控制图像缩放
时间: 2024-03-21 10:42:29 浏览: 57
基于PYQT5的图像处理软件设计
好的,以下是一份使用PyQt5实现的代码,可以实现您所需要的功能:
```python
import sys
from PyQt5.QtGui import QPixmap, QTransform
from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene
class ImageViewer(QGraphicsView):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建一个QGraphicsScene
self.scene = QGraphicsScene(self)
# 加载图片
pixmap = QPixmap('image.png')
# 将图片添加到QGraphicsScene中
self.item = self.scene.addPixmap(pixmap)
# 将QGraphicsScene设置为视图的场景
self.setScene(self.scene)
# 设置视图的大小策略为“保持大小”
self.setRenderHint(QGraphicsView.SmoothPixmapTransform)
self.setRenderHint(QGraphicsView.HighQualityAntialiasing)
self.setRenderHint(QGraphicsView.NonCosmeticDefaultPen)
def wheelEvent(self, event):
# 获取缩放比例
scale_factor = 1.2
zoom = scale_factor ** (event.angleDelta().y() / 240.0)
# 获取当前的变换矩阵
old_transform = self.transform()
# 缩放视图
self.setTransform(QTransform.fromScale(zoom, zoom) * old_transform)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = ImageViewer()
ex.show()
sys.exit(app.exec_())
```
这个例子中,我们创建了一个名为ImageViewer的QGraphicsView,并在其中创建了一个QGraphicsScene。我们将图片加载到QGraphicsScene中,并将QGraphicsScene设置为视图的场景。然后,我们将视图的大小策略设置为“保持大小”,以确保它不会改变图片的大小。我们重写了wheelEvent()方法,以便用户可以通过滚轮缩放图片。最后,我们将视图显示在屏幕上。
注意,我们使用了一些额外的参数来将视图设置为更好的质量,比如平滑的像素变换、高质量的抗锯齿和默认的非化妆笔。这些参数是可选的,您可以根据自己的需要进行设置。
阅读全文