【问题标题】:Resizable PyQt widget displaying an image with fixed aspect ratio可调整大小的 PyQt 小部件显示具有固定纵横比的图像
【发布时间】:2015-08-13 17:31:30
【问题描述】:

在小部件中显示 QImage 是一个常见问题。虽然这可以使用QLabel.setPixmap 完成,但生成的 QLabel 将具有与像素图大小相等的固定大小。可以使用setScaledContents 使 QLabel 缩放像素图并允许调整大小。但是,这将忽略图像的纵横比并缩放像素图以填充整个标签。

StackOverflow 上的其他几个问题要求解决该问题,给出的典型解决方案是根据小部件的大小使用 QPixmap.scaled() 重新缩放像素图:

是否有不同的、更“原生”的方式来实现这一目标?

【问题讨论】:

    标签: qt pyqt qimage


    【解决方案1】:

    以下基于 QLabel 的小部件将保留分配给它的像素图的纵横比。它使用heighForWidth 方法返回给定宽度的小部件的首选高度。这样,小部件在调整大小时自然会尊重像素图的纵横比并相应地对其进行缩放。在 PyQt5 中测试。

    class ImageWidget(QLabel):
    
        def __init__(self, parent=None):
            super().__init__(parent)
            self.setScaledContents(True)
    
        def hasHeightForWidth(self):
            return self.pixmap() is not None
    
        def heightForWidth(self, w):
            if self.pixmap():
                return int(w * (self.pixmap().height() / self.pixmap().width()))
    

    【讨论】:

      猜你喜欢
      • 2017-08-10
      • 2021-05-10
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2012-04-15
      相关资源
      最近更新 更多