在 QGridLayout 中设置 QPixmap 大小以填充 space

Setting QPixmap size to fill space in QGridLayout

我一直在尝试在 QGridLayout 中显示图像,并根据它可用的 space 调整它的大小。但是我似乎无法获得合适的尺寸。

我创建了一个 class ImageWidget(Qwidget),它在下面被引用为 self,并且 ImageWidget0 的一个实例被添加到 QGridLayout LayoutLayout.addWidget(ImageWidget0, 0, 0).

这就是我调整像素图大小的方式,它在布局中以指定大小毫无问题地显示图像:

self.label = QLabel(self)
self.pixmap = self.pixmap.scaled(image_size[0], image_size[1], Qt.KeepAspectRatio)
self.label.setPixmap(self.pixmap)
self.show()

然而,不同的分配方法 image_size 会产生不良结果。以下两个,分别使用小部件的大小和标签的大小,产生的 image_size 为 (100, 30),这太小了:

image_size = (self.width(), self.height())
image_size = (self.label.width(), self.label.height())

所以我尝试获取行和列的大小,而不是使用我在 QGridLayout documentation 中可以找到的唯一方法,但以下(可能不足为奇)都产生了 image_size 的 ( 0, 0):

image_size = (self.parent().layout.columnMinimumWidth(0), self.parent().layout.rowMinimumHeight(0))
image_size = (self.parentWidget().layout.columnMinimumWidth(0), self.parentWidget().layout.rowMinimumHeight(0))

需要说明的是:对于所有这些不同的像素图大小,布局本身并没有改变。如果 image_size 手动设置太大,它会被剪掉(这很好),但是当它太小时,它只会缩小到可用的 space 中。这就是让我认为问题不在于调整像素图大小的布局。

如果需要,我可以 post 更多代码,但我试图保持简洁和切题。

正如@musicamante 所指出的,在构造时使用小部件大小是没有意义的,因为尚未设置布局。我通过添加一个“加载图像”按钮来解决这个问题,该按钮可以在创建布局后添加图像,从而允许我使用以下方法正确设置大小:

image_size = (self.width(), self.height())
image_size = (self.width(), self.height())