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

3
我正在开发一个软件,从摄像头获取图片并将其放入窗口小部件中。由于我的照片大小是640x480,我希望它能调整图片大小以适应窗口大小,这样用户就可以调整窗口来缩放图像。我制定了以下算法:
1. 获取窗口小部件的大小 2. 基于图片和窗口高度计算比例 3. 调整图片大小 4. 显示图片
到目前为止,它一直很好用,但有一个问题。当我打开程序时,它会无限增长。我知道这是因为小部件正在扩展,而图片因为窗口在扩大而变得更大,这是正反馈。然而,我已经尝试更改大小策略为首选、固定等,但都没有起作用。
我的窗口结构如下:小部件->垂直布局->标签(像素图像)
1个回答

3
一种可能的解决方案是创建自定义控件,并覆盖 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


考虑到调整大小的问题,它运行得很好,但我认为我的问题表述不够清晰。实际上,我正在使用CAM获取多张图片,就像一段视频。因此,标签只在调整大小时刷新,而我希望它在每张新图片到来时都能刷新。有没有什么办法可以解决这个问题? - Eduardo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接