如何缩放和移动图像qlabel pyqt5

发布于 2025-02-09 23:26:42 字数 3330 浏览 0 评论 0原文

我同时陷入困境的缩放和移动图像。图像在Qlabel中设置。

Update

我正在使用MouseMoveEvent进行缩放

    def mousePressEvent(self, evt):
        self.oldPos = evt.globalPos()

    def mouseMoveEvent(self, evt):
        self._moveFrameImage(evt, self.oldPos)
        self.oldPos = evt.globalPos()

    def _moveFrameImage(self, evt, oldPos):
        delta = QtCore.QPoint(evt.globalPos() - oldPos)
        self.initPointImageSatelital = 
        QtCore.QPoint(self.lbl_imagenSatelital.x() + delta.x() , 
        self.lbl_imagenSatelital.y() + delta.y())
        self.lbl_imagenSatelital.move(self.lbl_imagenSatelital.x() + 
        delta.x(), self.lbl_imagenSatelital.y() + delta.y())
        self.lbl_imagenSatelital.move(self.initPointImageSatelital)
        self.oldPos = evt.globalPos()

来处理该机芯,我使用的

    def wheelEvent(self,event):

        valueDelta = event.angleDelta().y()
        self._zoomInOut(valueDelta)
        self.lbl_imagenSatelital.move(-300,-100)

    def _zoomInOut(self, deltaIncrease: int):
        if deltaIncrease > 0:
            self.zoom_out()
            self.zoomValue = self.zoomValue + 5
        else:
            self.zoom_in()
            self.zoomValue = self.zoomValue - 5     
    
    def zoom_in(self):
        self.widthImagenSatelital += 10
        self.heightImagenSatelital += 10
        self.resize_image()

    def zoom_out(self):
        self.widthImagenSatelital -= 10
        self.heightImagenSatelital -= 10
        self.resize_image()

    def resize_image(self):
        self.lbl_imagenSatelital.move(self.initPointImageSatelital)
        
        self.lbl_imagenSatelital.setPixmap(self.pixImage.scaled(
            self.widthImagenSatelital, self.heightImagenSatelital, QtCore.Qt.KeepAspectRatio,
            QtCore.Qt.SmoothTransformation))

        self.lbl_imagenSatelital.move(self.initPointImageSatelital)

是Qlabel的父母的父母是qmainwindow,

    def __init__(self):
        super(introWindow, self).__init__()
        self.centralwidget = QtWidgets.QWidget(self)
        self._insertImageAtFrame()

    def _insertImageAtFrame(self):
      
        fileNamePath = 'C:/Users/Investigaciones-Rob/Desktop/imagen_satelital.png'
        
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) #Minimum y Prefered  

        self.pixImage = QtGui.QPixmap(fileNamePath)

        self.lbl_imagenSatelital = QtWidgets.QLabel()
        self.lbl_imagenSatelital.setParent(self)
        self.heightImagenSatelital = 400
        self.widthImagenSatelital = 600
        self.zoomValue = 0
        
        self.lbl_imagenSatelital.setPixmap(self.pixImage.scaled(self.widthImagenSatelital, self.heightImagenSatelital, QtCore.Qt.KeepAspectRatio))            
        self.lbl_imagenSatelital.setSizePolicy(sizePolicy)

问题是在我在self.resize_image()中使用setPixmap之后,图像是在我使用setPixmap之后移至窗户的起源。似乎移动功能无法正常工作。

缩放之后:

”在此处输入图像说明”

I'm having troubled scaling and moving an image at the same time. The image is setting in a QLabel.

UPDATE

I'm handling the movement with mouseMoveEvent

    def mousePressEvent(self, evt):
        self.oldPos = evt.globalPos()

    def mouseMoveEvent(self, evt):
        self._moveFrameImage(evt, self.oldPos)
        self.oldPos = evt.globalPos()

    def _moveFrameImage(self, evt, oldPos):
        delta = QtCore.QPoint(evt.globalPos() - oldPos)
        self.initPointImageSatelital = 
        QtCore.QPoint(self.lbl_imagenSatelital.x() + delta.x() , 
        self.lbl_imagenSatelital.y() + delta.y())
        self.lbl_imagenSatelital.move(self.lbl_imagenSatelital.x() + 
        delta.x(), self.lbl_imagenSatelital.y() + delta.y())
        self.lbl_imagenSatelital.move(self.initPointImageSatelital)
        self.oldPos = evt.globalPos()

For the scaling, I'm using the wheelEvent

    def wheelEvent(self,event):

        valueDelta = event.angleDelta().y()
        self._zoomInOut(valueDelta)
        self.lbl_imagenSatelital.move(-300,-100)

    def _zoomInOut(self, deltaIncrease: int):
        if deltaIncrease > 0:
            self.zoom_out()
            self.zoomValue = self.zoomValue + 5
        else:
            self.zoom_in()
            self.zoomValue = self.zoomValue - 5     
    
    def zoom_in(self):
        self.widthImagenSatelital += 10
        self.heightImagenSatelital += 10
        self.resize_image()

    def zoom_out(self):
        self.widthImagenSatelital -= 10
        self.heightImagenSatelital -= 10
        self.resize_image()

    def resize_image(self):
        self.lbl_imagenSatelital.move(self.initPointImageSatelital)
        
        self.lbl_imagenSatelital.setPixmap(self.pixImage.scaled(
            self.widthImagenSatelital, self.heightImagenSatelital, QtCore.Qt.KeepAspectRatio,
            QtCore.Qt.SmoothTransformation))

        self.lbl_imagenSatelital.move(self.initPointImageSatelital)

The parent of my Qlabel is the QMainWindow

    def __init__(self):
        super(introWindow, self).__init__()
        self.centralwidget = QtWidgets.QWidget(self)
        self._insertImageAtFrame()

    def _insertImageAtFrame(self):
      
        fileNamePath = 'C:/Users/Investigaciones-Rob/Desktop/imagen_satelital.png'
        
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) #Minimum y Prefered  

        self.pixImage = QtGui.QPixmap(fileNamePath)

        self.lbl_imagenSatelital = QtWidgets.QLabel()
        self.lbl_imagenSatelital.setParent(self)
        self.heightImagenSatelital = 400
        self.widthImagenSatelital = 600
        self.zoomValue = 0
        
        self.lbl_imagenSatelital.setPixmap(self.pixImage.scaled(self.widthImagenSatelital, self.heightImagenSatelital, QtCore.Qt.KeepAspectRatio))            
        self.lbl_imagenSatelital.setSizePolicy(sizePolicy)

The problem is after I used setPixmap in self.resize_image(), the image move to the origin of the window. It seems that the move function is not working.

enter image description here

after scaling:

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倚栏听风 2025-02-16 23:26:42

我发现了错误。只是擦除这条线

self.lbl_imagensatelital.move(-300,-100)

I found the mistake. Just erase this line

self.lbl_imagenSatelital.move(-300,-100)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文