PyQt - 自动调整小部件/图片大小

时间:2017-06-12 17:19:18

标签: python image-processing pyqt qt-designer autoresize

我正在开发一种从CAM获取图片并将其放入窗口小部件窗口的软件。由于我的图片是640x480,我希望它调整图片大小以适应窗口大小,因此用户可以调整窗口大小以放大或缩小图像。 我做了以下算法:

  1. 获取小部件尺寸
  2. 根据图片和小部件高度计算配给量
  3. 调整图片大小
  4. 显示图片
  5. 到目前为止,它运作良好,但存在问题。当我打开程序时它开始无限增长,我知道这是因为窗口小部件正在扩展而且图片变大,因为窗口首先增加,这是一个积极的反馈。 但是,我已经尝试将大小策略更改为“首选”,“已修复”等。但没有一个有效。

    我的窗口是这样的结构:Widget-> VLayout->标签(Pixmap图像)

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是创建一个自定义窗口小部件并覆盖paintEvent方法,如下面的代码所示。

class Label(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent=parent)
        self.p = QPixmap()

    def setPixmap(self, p):
        self.p = p
        self.update()

    def paintEvent(self, event):
        if not self.p.isNull():
            painter = QPainter(self)
            painter.setRenderHint(QPainter.SmoothPixmapTransform)
            painter.drawPixmap(self.rect(), self.p)


class Widget(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent=parent)
        lay = QVBoxLayout(self)
        lb = Label(self)
        lb.setPixmap(QPixmap("car.jpg"))
        lay.addWidget(lb)



app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())

enter image description here

enter image description here