大人,时代变了 2021-10-22 10:11 采纳率: 0%
浏览 143
已结题

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格式的文件")

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

  • 写回答

1条回答 默认 最新

  • 唯妮 2021-10-22 15:03
    关注

    图元的缩放是按比例的,我不知道有没有自由拉伸的。
    按照这个方法来设置缩放,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)
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 10月30日
  • 赞助了问题酬金 10月22日
  • 赞助了问题酬金 10月22日
  • 创建了问题 10月22日