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)的大小?