PyQt - 自动调整大小 widget/picture

PyQt - Automatically resizing widget/picture

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

  1. 获取小部件大小
  2. 根据图片和widget高度计算比例
  3. 调整图片大小
  4. 显示图片

到目前为止,它运行良好,但存在问题。当我打开程序时,它开始无限增长,我知道这是因为小部件正在扩展并且图片变大,因为 window 一开始就在增加,这是一个积极的反馈。 但是,我已经尝试将尺寸政策更改为首选、固定等。并且 none 奏效了。

我的window结构是这样的:Widget->VLayout->Label(Pixmap image)

一种可能的解决方案是创建自定义小部件并覆盖 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_())