PyQt 保持 QLabel 大小纵横比

Posted

技术标签:

【中文标题】PyQt 保持 QLabel 大小纵横比【英文标题】:PyQt Keeping QLabel Size Aspect Ratio 【发布时间】:2015-09-26 03:19:59 【问题描述】:

我有一个显示图像的 QLabel。目前,我已将图像设置为保持其纵横比,并在 QLabel 中尽可能大。

有什么方法可以设置 QLabel 以保持图像的纵横比?当标签比图像宽时,我不想在图像的任何一侧都有“空白”QLabel 空间。

我一直在寻找可以让我设置标签纵横比的任何类型的 QLabel 属性,但没有设法得到任何东西来做我想做的事情。

我看到的所有答案都与保持调整后的 QPixmap 图像的纵横比有关,但与包含它的 QLabel 无关。

任何帮助都会很棒!

干杯

FP

【问题讨论】:

您可以在 QLabel 上使用setMaximumSize,将其设置为图像的大小。每次发生调整大小事件时,您都必须调用它。不知道有没有更简单的方法。 谢谢 tmoreau,经过一番思考,这似乎还不错:) 【参考方案1】:

我似乎已经破解了它,所以以防其他人想知道如何做到这一点:

我采用了 tmoreau 的解决方案并稍作修改。要使其工作,您需要在绘制事件之前将 QLabel 的最大尺寸设置为图像的新尺寸。紧接着,您需要将 QLabel 的最大尺寸设置为非常大的值,否则您将无法放大图像,因为您将最大尺寸指定为当前图像的最大尺寸。

def paintEvent(self, event):
        size = self.size()
        painter = QtGui.QPainter(self)
        point = QtCore.QPoint(0,0)
        scaledPix = self.pixmap.scaled(size, Qt.KeepAspectRatio, transformMode = Qt.SmoothTransformation)
        self.setMaximumSize(scaledPix.size())
        point.setX(0)
        point.setY(0)
        #print (point.x(), ' ', point.y())
        painter.drawPixmap(point, scaledPix)
        self.setMaximumSize(QtCore.QSize(4000,5000))

如果有人有更好的解决方案,请务必告诉我!

【讨论】:

我得到了AttributeError: 'module' object has no attribute 'KeepAspectRatio'——原来有多个“Qt”对象。有效的长名称是PyQt4.QtCore.Qt.KeepAspectRatio

以上是关于PyQt 保持 QLabel 大小纵横比的主要内容,如果未能解决你的问题,请参考以下文章

如何使用保持纵横比的 QHBLayout 调整子 QLabel(具有 QPixmap)的大小?

如何像 QLabel 一样快速调整图像大小?

我怎样才能让 QLabel 与它显示的 QPixmap 的大小完全一致?

ImageView 调整大小并保持纵横比

在保持纵横比和适合特定像素大小的同时批量调整照片大小

OpenGL - 调整窗口大小时保持纵横比