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

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

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

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

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

任何帮助都会很棒!

干杯

FP

【问题讨论】:

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

标签: python-3.x pyqt aspect-ratio qpixmap qlabel


【解决方案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
猜你喜欢
  • 2019-06-29
  • 2012-01-02
  • 2020-06-14
  • 2013-06-26
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多