pyqt5中 QGraphicsPixmapItem控件实现边缘拉伸缩放。


    def jpg_up(self):
        files = self.file_get(self.lineEdit_2)
        if not files:
            return
        print(files)
        try:
            self.graphicsView_2.setDragMode(QGraphicsView.ScrollHandDrag)

            img = cv2.imread(files)  # 读取图像
            img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 转换图像通道
            x = img.shape[1]  # 获取图像大小
            y = img.shape[0]
            self.zoomscale = 0.6  # 图片放缩尺度
            frame = QImage(img, x, y, QImage.Format_RGB888)
            pix = QPixmap.fromImage(frame)
            self.item = QGraphicsPixmapItem(pix)  # 创建像素图元
            self.item.setScale(self.zoomscale)

            self.item.setFlag(QGraphicsItem.ItemIsFocusable)  # 选择时出现虚线框
            self.item.setFlag(QGraphicsItem.ItemIsMovable)  # 可拖动
            self.item.setFlag(QGraphicsItem.ItemIsSelectable)  # 可选择


            self.scene = QGraphicsScene()  # 创建场景
            self.scene.addItem(self.item)
            self.graphicsView_2.setScene(self.scene)
            # 自适应大小展示
            # self.graphicsView_2.fitInView(QGraphicsPixmapItem(QPixmap(pix)))


        except Exception as e:
            print(e)
            self.message_info("请上传.jpg格式的文件")

我希望实现鼠标点住图片边缘后,可通过拉伸改变图片大小的效果

图元的缩放是按比例的,我不知道有没有自由拉伸的。
按照这个方法来设置缩放,self.item.setScale(self.zoomscale),
你可以通过一组外部按钮改变self.zoomscale的值来缩放

# 每次点击放大比例+0.05
def enlarge(self):
    self.zoomscale+=0.05
    if  self.zoomscale>=1.2: # 设置放大上限
        self.zoomscale=1.2
    self.item.setScale(self.zoomscale)